ZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggOWZmYmEyZS4uMjVhNjI1NCAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTE0MSw3ICsxNDEsNyBAQAogIyBEb24ndCBpbmNsdWRlIHN0dWZmIGFscmVhZHkgZG9uZSBpbiAkKExJQlMpCiBTVUJESVJTCT0gdG9vbHMgXAogCSAgZXhhbXBsZXMvc3RhbmRhbG9uZSBcCi0JICBhcGlfZXhhbXBsZXMKKwkgIGV4YW1wbGVzL2FwaQogCiAuUEhPTlkgOiAkKFNVQkRJUlMpCiAKQEAgLTM2MDEsNiArMzYwMSw3IEBACiAJICAgICAgICQob2JqKWV4YW1wbGVzL3N0YW5kYWxvbmUvc21jOTExMTFfZWVwcm9tCQkgIFwKIAkgICAgICAgJChvYmopZXhhbXBsZXMvc3RhbmRhbG9uZS90ZXN0X2J1cnN0CQkJICBcCiAJICAgICAgICQob2JqKWV4YW1wbGVzL3N0YW5kYWxvbmUvdGltZXIKKwlAcm0gLWYgJChvYmopZXhhbXBsZXMvYXBpL2RlbW97LC5iaW59CiAJQHJtIC1mICQob2JqKXRvb2xzL2JtcF9sb2dvCSAgICQob2JqKXRvb2xzL2Vhc3lsb2dvL2Vhc3lsb2dvICBcCiAJICAgICAgICQob2JqKXRvb2xzL2Vudi97ZndfcHJpbnRlbnYsZndfc2V0ZW52fQkJCSAgXAogCSAgICAgICAkKG9iail0b29scy9lbnZjcmMJCQkJCSAgXApAQCAtMzYxNyw3ICszNjE4LDcgQEAKIAlAcm0gLWYgJChvYmopaW5jbHVkZS9ibXBfbG9nby5oCiAJQHJtIC1mICQob2JqKW5hbmRfc3BsL3t1LWJvb3Qtc3BsLHUtYm9vdC1zcGwubWFwLFN5c3RlbS5tYXB9CiAJQHJtIC1mICQob2JqKW9uZW5hbmRfaXBsL29uZW5hbmQte2lwbCxpcGwuYmluLGlwbC0yay5iaW4saXBsLTRrLmJpbixpcGwubWFwfQotCUBybSAtZiAkKG9iailhcGlfZXhhbXBsZXMvZGVtbyAkKFRJTUVTVEFNUF9GSUxFKSAkKFZFUlNJT05fRklMRSkKKwlAcm0gLWYgJChUSU1FU1RBTVBfRklMRSkgJChWRVJTSU9OX0ZJTEUpCiAJQGZpbmQgJChPQkpUUkVFKSAtdHlwZSBmIFwKIAkJXCggLW5hbWUgJ2NvcmUnIC1vIC1uYW1lICcqLmJhaycgLW8gLW5hbWUgJyp+JyBcCiAJCS1vIC1uYW1lICcqLm8nCS1vIC1uYW1lICcqLmEnIC1vIC1uYW1lICcqLmV4ZScJXCkgLXByaW50IFwKZGlmZiAtLWdpdCBhL2JvYXJkL2ZyZWVzY2FsZS9jb21tb24vcGl4aXMuYyBiL2JvYXJkL2ZyZWVzY2FsZS9jb21tb24vcGl4aXMuYwppbmRleCA0ODUxZjA2Li43MjEwNTEyIDEwMDY0NAotLS0gYS9ib2FyZC9mcmVlc2NhbGUvY29tbW9uL3BpeGlzLmMKKysrIGIvYm9hcmQvZnJlZXNjYWxlL2NvbW1vbi9waXhpcy5jCkBAIC0zOSw3ICszOSw4IEBACiAgKi8KIHZvaWQgcGl4aXNfcmVzZXQodm9pZCkKIHsKLSAgICBvdXQ4KFBJWElTX0JBU0UgKyBQSVhJU19SU1QsIDApOworCXU4ICpwaXhpc19iYXNlID0gKHU4ICopUElYSVNfQkFTRTsKKwlvdXRfOChwaXhpc19iYXNlICsgUElYSVNfUlNULCAwKTsKIH0KIAogCkBAIC00OSw2ICs1MCw3IEBACiBpbnQgc2V0X3B4X3N5c2Nsayh1bG9uZyBzeXNjbGspCiB7CiAJdTggc3lzY2xrX3MsIHN5c2Nsa19yLCBzeXNjbGtfdiwgdmNsa2gsIHZjbGtsLCBzeXNjbGtfYXV4OworCXU4ICpwaXhpc19iYXNlID0gKHU4ICopUElYSVNfQkFTRTsKIAogCXN3aXRjaCAoc3lzY2xrKSB7CiAJY2FzZSAzMzoKQEAgLTEwNywxMCArMTA5LDEwIEBACiAJdmNsa2ggPSAoc3lzY2xrX3MgPDwgNSkgfCBzeXNjbGtfcjsKIAl2Y2xrbCA9IHN5c2Nsa192OwogCi0Jb3V0OChQSVhJU19CQVNFICsgUElYSVNfVkNMS0gsIHZjbGtoKTsKLQlvdXQ4KFBJWElTX0JBU0UgKyBQSVhJU19WQ0xLTCwgdmNsa2wpOworCW91dF84KHBpeGlzX2Jhc2UgKyBQSVhJU19WQ0xLSCwgdmNsa2gpOworCW91dF84KHBpeGlzX2Jhc2UgKyBQSVhJU19WQ0xLTCwgdmNsa2wpOwogCi0Jb3V0OChQSVhJU19CQVNFICsgUElYSVNfQVVYLCBzeXNjbGtfYXV4KTsKKwlvdXRfOChwaXhpc19iYXNlICsgUElYSVNfQVVYLCBzeXNjbGtfYXV4KTsKIAogCXJldHVybiAxOwogfQpAQCAtMTIwLDYgKzEyMiw3IEBACiB7CiAJdTggdG1wOwogCXU4IHZhbDsKKwl1OCAqcGl4aXNfYmFzZSA9ICh1OCAqKVBJWElTX0JBU0U7CiAKIAlzd2l0Y2ggKG1weHBsbCkgewogCWNhc2UgMjoKQEAgLTEzNyw5ICsxNDAsOSBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQl0bXAgPSBpbjgoUElYSVNfQkFTRSArIFBJWElTX1ZTUEVFRDEpOworCXRtcCA9IGluXzgocGl4aXNfYmFzZSArIFBJWElTX1ZTUEVFRDEpOwogCXRtcCA9ICh0bXAgJiAweEYwKSB8ICh2YWwgJiAweDBGKTsKLQlvdXQ4KFBJWElTX0JBU0UgKyBQSVhJU19WU1BFRUQxLCB0bXApOworCW91dF84KHBpeGlzX2Jhc2UgKyBQSVhJU19WU1BFRUQxLCB0bXApOwogCiAJcmV0dXJuIDE7CiB9CkBAIC0xNDksNiArMTUyLDcgQEAKIHsKIAl1OCB0bXA7CiAJdTggdmFsOworCXU4ICpwaXhpc19iYXNlID0gKHU4ICopUElYSVNfQkFTRTsKIAogCXN3aXRjaCAoKGludCljb3JlcGxsKSB7CiAJY2FzZSAyMDoKQEAgLTE3NCw5ICsxNzgsOSBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQl0bXAgPSBpbjgoUElYSVNfQkFTRSArIFBJWElTX1ZTUEVFRDApOworCXRtcCA9IGluXzgocGl4aXNfYmFzZSArIFBJWElTX1ZTUEVFRDApOwogCXRtcCA9ICh0bXAgJiAweEUwKSB8ICh2YWwgJiAweDFGKTsKLQlvdXQ4KFBJWElTX0JBU0UgKyBQSVhJU19WU1BFRUQwLCB0bXApOworCW91dF84KHBpeGlzX2Jhc2UgKyBQSVhJU19WU1BFRUQwLCB0bXApOwogCiAJcmV0dXJuIDE7CiB9CkBAIC0xODQsMjcgKzE4OCwyOSBAQAogCiB2b2lkIHJlYWRfZnJvbV9weF9yZWdzKGludCBzZXQpCiB7CisJdTggKnBpeGlzX2Jhc2UgPSAodTggKilQSVhJU19CQVNFOwogCXU4IG1hc2sgPSAweDFDOwkvKiBDT1JFUExMLCBNUFhQTEwsIFNZU0NMSyBjb250cm9sbGVkIGJ5IFBJWElTICovCi0JdTggdG1wID0gaW44KFBJWElTX0JBU0UgKyBQSVhJU19WQ0ZHRU4wKTsKKwl1OCB0bXAgPSBpbl84KHBpeGlzX2Jhc2UgKyBQSVhJU19WQ0ZHRU4wKTsKIAogCWlmIChzZXQpCiAJCXRtcCA9IHRtcCB8IG1hc2s7CiAJZWxzZQogCQl0bXAgPSB0bXAgJiB+bWFzazsKLQlvdXQ4KFBJWElTX0JBU0UgKyBQSVhJU19WQ0ZHRU4wLCB0bXApOworCW91dF84KHBpeGlzX2Jhc2UgKyBQSVhJU19WQ0ZHRU4wLCB0bXApOwogfQogCiAKIHZvaWQgcmVhZF9mcm9tX3B4X3JlZ3NfYWx0YmFuayhpbnQgc2V0KQogeworCXU4ICpwaXhpc19iYXNlID0gKHU4ICopUElYSVNfQkFTRTsKIAl1OCBtYXNrID0gMHgwNDsJLyogRkxBU0hCQU5LIGFuZCBGTEFTSE1BUCBjb250cm9sbGVkIGJ5IFBJWElTICovCi0JdTggdG1wID0gaW44KFBJWElTX0JBU0UgKyBQSVhJU19WQ0ZHRU4xKTsKKwl1OCB0bXAgPSBpbl84KHBpeGlzX2Jhc2UgKyBQSVhJU19WQ0ZHRU4xKTsKIAogCWlmIChzZXQpCiAJCXRtcCA9IHRtcCB8IG1hc2s7CiAJZWxzZQogCQl0bXAgPSB0bXAgJiB+bWFzazsKLQlvdXQ4KFBJWElTX0JBU0UgKyBQSVhJU19WQ0ZHRU4xLCB0bXApOworCW91dF84KHBpeGlzX2Jhc2UgKyBQSVhJU19WQ0ZHRU4xLCB0bXApOwogfQogCiAjaWZuZGVmIENPTkZJR19TWVNfUElYSVNfVkJPT1RfTUFTSwpAQCAtMjE0LDUwICsyMjAsNTQgQEAKIHZvaWQgY2xlYXJfYWx0YmFuayh2b2lkKQogewogCXU4IHRtcDsKKwl1OCAqcGl4aXNfYmFzZSA9ICh1OCAqKVBJWElTX0JBU0U7CiAKLQl0bXAgPSBpbjgoUElYSVNfQkFTRSArIFBJWElTX1ZCT09UKTsKKwl0bXAgPSBpbl84KHBpeGlzX2Jhc2UgKyBQSVhJU19WQk9PVCk7CiAJdG1wICY9IH5DT05GSUdfU1lTX1BJWElTX1ZCT09UX01BU0s7CiAKLQlvdXQ4KFBJWElTX0JBU0UgKyBQSVhJU19WQk9PVCwgdG1wKTsKKwlvdXRfOChwaXhpc19iYXNlICsgUElYSVNfVkJPT1QsIHRtcCk7CiB9CiAKIAogdm9pZCBzZXRfYWx0YmFuayh2b2lkKQogewogCXU4IHRtcDsKKwl1OCAqcGl4aXNfYmFzZSA9ICh1OCAqKVBJWElTX0JBU0U7CiAKLQl0bXAgPSBpbjgoUElYSVNfQkFTRSArIFBJWElTX1ZCT09UKTsKKwl0bXAgPSBpbl84KHBpeGlzX2Jhc2UgKyBQSVhJU19WQk9PVCk7CiAJdG1wIHw9IENPTkZJR19TWVNfUElYSVNfVkJPT1RfTUFTSzsKIAotCW91dDgoUElYSVNfQkFTRSArIFBJWElTX1ZCT09ULCB0bXApOworCW91dF84KHBpeGlzX2Jhc2UgKyBQSVhJU19WQk9PVCwgdG1wKTsKIH0KIAogCiB2b2lkIHNldF9weF9nbyh2b2lkKQogewogCXU4IHRtcDsKKwl1OCAqcGl4aXNfYmFzZSA9ICh1OCAqKVBJWElTX0JBU0U7CiAKLQl0bXAgPSBpbjgoUElYSVNfQkFTRSArIFBJWElTX1ZDVEwpOworCXRtcCA9IGluXzgocGl4aXNfYmFzZSArIFBJWElTX1ZDVEwpOwogCXRtcCA9IHRtcCAmIDB4MUU7CQkJLyogY2xlYXIgR08gYml0ICovCi0Jb3V0OChQSVhJU19CQVNFICsgUElYSVNfVkNUTCwgdG1wKTsKKwlvdXRfOChwaXhpc19iYXNlICsgUElYSVNfVkNUTCwgdG1wKTsKIAotCXRtcCA9IGluOChQSVhJU19CQVNFICsgUElYSVNfVkNUTCk7CisJdG1wID0gaW5fOChwaXhpc19iYXNlICsgUElYSVNfVkNUTCk7CiAJdG1wID0gdG1wIHwgMHgwMTsJLyogc2V0IEdPIGJpdCAtIHN0YXJ0IHJlc2V0IHNlcXVlbmNlciAqLwotCW91dDgoUElYSVNfQkFTRSArIFBJWElTX1ZDVEwsIHRtcCk7CisJb3V0XzgocGl4aXNfYmFzZSArIFBJWElTX1ZDVEwsIHRtcCk7CiB9CiAKIAogdm9pZCBzZXRfcHhfZ29fd2l0aF93YXRjaGRvZyh2b2lkKQogewogCXU4IHRtcDsKKwl1OCAqcGl4aXNfYmFzZSA9ICh1OCAqKVBJWElTX0JBU0U7CiAKLQl0bXAgPSBpbjgoUElYSVNfQkFTRSArIFBJWElTX1ZDVEwpOworCXRtcCA9IGluXzgocGl4aXNfYmFzZSArIFBJWElTX1ZDVEwpOwogCXRtcCA9IHRtcCAmIDB4MUU7Ci0Jb3V0OChQSVhJU19CQVNFICsgUElYSVNfVkNUTCwgdG1wKTsKKwlvdXRfOChwaXhpc19iYXNlICsgUElYSVNfVkNUTCwgdG1wKTsKIAotCXRtcCA9IGluOChQSVhJU19CQVNFICsgUElYSVNfVkNUTCk7CisJdG1wID0gaW5fOChwaXhpc19iYXNlICsgUElYSVNfVkNUTCk7CiAJdG1wID0gdG1wIHwgMHgwOTsKLQlvdXQ4KFBJWElTX0JBU0UgKyBQSVhJU19WQ1RMLCB0bXApOworCW91dF84KHBpeGlzX2Jhc2UgKyBQSVhJU19WQ1RMLCB0bXApOwogfQogCiAKQEAgLTI2NSwxNSArMjc1LDE2IEBACiAJCQkgICAgICAgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7CiAJdTggdG1wOworCXU4ICpwaXhpc19iYXNlID0gKHU4ICopUElYSVNfQkFTRTsKIAotCXRtcCA9IGluOChQSVhJU19CQVNFICsgUElYSVNfVkNUTCk7CisJdG1wID0gaW5fOChwaXhpc19iYXNlICsgUElYSVNfVkNUTCk7CiAJdG1wID0gdG1wICYgMHgxRTsKLQlvdXQ4KFBJWElTX0JBU0UgKyBQSVhJU19WQ1RMLCB0bXApOworCW91dF84KHBpeGlzX2Jhc2UgKyBQSVhJU19WQ1RMLCB0bXApOwogCiAJLyogc2V0dGluZyBWQ1RMW1dERU5dIHRvIDAgdG8gZGlzYWJsZSB3YXRjaCBkb2cgKi8KLQl0bXAgPSBpbjgoUElYSVNfQkFTRSArIFBJWElTX1ZDVEwpOworCXRtcCA9IGluXzgocGl4aXNfYmFzZSArIFBJWElTX1ZDVEwpOwogCXRtcCAmPSB+MHgwODsKLQlvdXQ4KFBJWElTX0JBU0UgKyBQSVhJU19WQ1RMLCB0bXApOworCW91dF84KHBpeGlzX2Jhc2UgKyBQSVhJU19WQ1RMLCB0bXApOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yODgsNiArMjk5LDcgQEAKIGludCBwaXhpc19zZXRfc2dtaWkoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7CiAJaW50IHdoaWNoX3RzZWMgPSAtMTsKKwl1OCAqcGl4aXNfYmFzZSA9ICh1OCAqKVBJWElTX0JBU0U7CiAJdWNoYXIgbWFzazsKIAl1Y2hhciBzd2l0Y2hfbWFzazsKIApAQCAtMzI4LDE3ICszNDAsMTUgQEAKIAogCS8qIFRvZ2dsZSB3aGV0aGVyIHRoZSBzd2l0Y2hlcyBvciBGUEdBIGNvbnRyb2wgdGhlIHNldHRpbmdzICovCiAJaWYgKCFzdHJjbXAoYXJndlthcmdjIC0gMV0sICJzd2l0Y2giKSkKLQkJY2xyYml0c184KCh1bnNpZ25lZCBjaGFyICopUElYSVNfQkFTRSArIFBJWElTX1ZDRkdFTjEsCi0JCQlzd2l0Y2hfbWFzayk7CisJCWNscmJpdHNfOChwaXhpc19iYXNlICsgUElYSVNfVkNGR0VOMSwgc3dpdGNoX21hc2spOwogCWVsc2UKLQkJc2V0Yml0c184KCh1bnNpZ25lZCBjaGFyICopUElYSVNfQkFTRSArIFBJWElTX1ZDRkdFTjEsCi0JCQlzd2l0Y2hfbWFzayk7CisJCXNldGJpdHNfOChwaXhpc19iYXNlICsgUElYSVNfVkNGR0VOMSwgc3dpdGNoX21hc2spOwogCiAJLyogSWYgaXQncyBub3QgdGhlIHN3aXRjaGVzLCBlbmFibGUgb3IgZGlzYWJsZSBTR01JSSwgYXMgc3BlY2lmaWVkICovCiAJaWYgKCFzdHJjbXAoYXJndlthcmdjIC0gMV0sICJvbiIpKQotCQljbHJiaXRzXzgoKHVuc2lnbmVkIGNoYXIgKilQSVhJU19CQVNFICsgUElYSVNfVlNQRUVEMiwgbWFzayk7CisJCWNscmJpdHNfOChwaXhpc19iYXNlICsgUElYSVNfVlNQRUVEMiwgbWFzayk7CiAJZWxzZSBpZiAoIXN0cmNtcChhcmd2W2FyZ2MgLSAxXSwgIm9mZiIpKQotCQlzZXRiaXRzXzgoKHVuc2lnbmVkIGNoYXIgKilQSVhJU19CQVNFICsgUElYSVNfVlNQRUVEMiwgbWFzayk7CisJCXNldGJpdHNfOChwaXhpc19iYXNlICsgUElYSVNfVlNQRUVEMiwgbWFzayk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NTM2ZHMvbXBjODUzNmRzLmMgYi9ib2FyZC9mcmVlc2NhbGUvbXBjODUzNmRzL21wYzg1MzZkcy5jCmluZGV4IDI4YjI3ZWUuLjhjNTk4NGIgMTAwNjQ0Ci0tLSBhL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NTM2ZHMvbXBjODUzNmRzLmMKKysrIGIvYm9hcmQvZnJlZXNjYWxlL21wYzg1MzZkcy9tcGM4NTM2ZHMuYwpAQCAtNjAsMTAgKzYwLDQxIEBACiAKIGludCBjaGVja2JvYXJkICh2b2lkKQogewotCXByaW50ZiAoIkJvYXJkOiBNUEM4NTM2RFMsIFN5c3RlbSBJRDogMHglMDJ4LCAiCi0JCSJTeXN0ZW0gVmVyc2lvbjogMHglMDJ4LCBGUEdBIFZlcnNpb246IDB4JTAyeFxuIiwKLQkJaW44KFBJWElTX0JBU0UgKyBQSVhJU19JRCksIGluOChQSVhJU19CQVNFICsgUElYSVNfVkVSKSwKLQkJaW44KFBJWElTX0JBU0UgKyBQSVhJU19QVkVSKSk7CisJdTggdmJvb3Q7CisJdTggKnBpeGlzX2Jhc2UgPSAodTggKilQSVhJU19CQVNFOworCisJcHV0cygiQm9hcmQ6IE1QQzg1MzZEUyAiKTsKKyNpZmRlZiBDT05GSUdfUEhZU182NEJJVAorCXB1dHMoIigzNi1iaXQgYWRkcm1hcCkgIik7CisjZW5kaWYKKworCXByaW50ZiAoIlN5cyBJRDogMHglMDJ4LCAiCisJCSJTeXMgVmVyOiAweCUwMngsIEZQR0EgVmVyOiAweCUwMngsICIsCisJCWluXzgocGl4aXNfYmFzZSArIFBJWElTX0lEKSwgaW5fOChwaXhpc19iYXNlICsgUElYSVNfVkVSKSwKKwkJaW5fOChwaXhpc19iYXNlICsgUElYSVNfUFZFUikpOworCisJdmJvb3QgPSBpbl84KHBpeGlzX2Jhc2UgKyBQSVhJU19WQk9PVCk7CisJc3dpdGNoICgodmJvb3QgJiBQSVhJU19WQk9PVF9MQk1BUCkgPj4gNSkgeworCQljYXNlIFBJWElTX1ZCT09UX0xCTUFQX05PUjA6CisJCQlwdXRzICgidkJhbms6IDBcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgUElYSVNfVkJPT1RfTEJNQVBfTk9SMToKKwkJCXB1dHMgKCJ2QmFuazogMVxuIik7CisJCQlicmVhazsKKwkJY2FzZSBQSVhJU19WQk9PVF9MQk1BUF9OT1IyOgorCQkJcHV0cyAoInZCYW5rOiAyXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIFBJWElTX1ZCT09UX0xCTUFQX05PUjM6CisJCQlwdXRzICgidkJhbms6IDNcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgUElYSVNfVkJPT1RfTEJNQVBfUEpFVDoKKwkJCXB1dHMgKCJQcm9tamV0XG4iKTsKKwkJCWJyZWFrOworCQljYXNlIFBJWElTX1ZCT09UX0xCTUFQX05BTkQ6CisJCQlwdXRzICgiTkFORFxuIik7CisJCQlicmVhazsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDk4LDIwICs1MjksMjQgQEAKIHVuc2lnbmVkIGxvbmcKIGdldF9ib2FyZF9zeXNfY2xrKHVsb25nIGR1bW15KQogeworCXU4ICpwaXhpc19iYXNlID0gKHU4ICopUElYSVNfQkFTRTsKKwogCXJldHVybiBpY3MzMDdfY2xrX2ZyZXEgKAotCSAgICBpbjgoUElYSVNfQkFTRSArIFBJWElTX1ZTWVNDTEswKSwKLQkgICAgaW44KFBJWElTX0JBU0UgKyBQSVhJU19WU1lTQ0xLMSksCi0JICAgIGluOChQSVhJU19CQVNFICsgUElYSVNfVlNZU0NMSzIpCisJICAgIGluXzgocGl4aXNfYmFzZSArIFBJWElTX1ZTWVNDTEswKSwKKwkgICAgaW5fOChwaXhpc19iYXNlICsgUElYSVNfVlNZU0NMSzEpLAorCSAgICBpbl84KHBpeGlzX2Jhc2UgKyBQSVhJU19WU1lTQ0xLMikKIAkpOwogfQogCiB1bnNpZ25lZCBsb25nCiBnZXRfYm9hcmRfZGRyX2Nsayh1bG9uZyBkdW1teSkKIHsKKwl1OCAqcGl4aXNfYmFzZSA9ICh1OCAqKVBJWElTX0JBU0U7CisKIAlyZXR1cm4gaWNzMzA3X2Nsa19mcmVxICgKLQkgICAgaW44KFBJWElTX0JBU0UgKyBQSVhJU19WRERSQ0xLMCksCi0JICAgIGluOChQSVhJU19CQVNFICsgUElYSVNfVkREUkNMSzEpLAotCSAgICBpbjgoUElYSVNfQkFTRSArIFBJWElTX1ZERFJDTEsyKQorCSAgICBpbl84KHBpeGlzX2Jhc2UgKyBQSVhJU19WRERSQ0xLMCksCisJICAgIGluXzgocGl4aXNfYmFzZSArIFBJWElTX1ZERFJDTEsxKSwKKwkgICAgaW5fOChwaXhpc19iYXNlICsgUElYSVNfVkREUkNMSzIpCiAJKTsKIH0KICNlbHNlCkBAIC01MjAsOCArNTU1LDkgQEAKIHsKIAl1OCBpOwogCXVsb25nIHZhbCA9IDA7CisJdTggKnBpeGlzX2Jhc2UgPSAodTggKilQSVhJU19CQVNFOwogCi0JaSA9IGluOChQSVhJU19CQVNFICsgUElYSVNfU1BEKTsKKwlpID0gaW5fOChwaXhpc19iYXNlICsgUElYSVNfU1BEKTsKIAlpICY9IDB4MDc7CiAKIAlzd2l0Y2ggKGkpIHsKQEAgLTU1OSw4ICs1OTUsOSBAQAogewogCXU4IGk7CiAJdWxvbmcgdmFsID0gMDsKKwl1OCAqcGl4aXNfYmFzZSA9ICh1OCAqKVBJWElTX0JBU0U7CiAKLQlpID0gaW44KFBJWElTX0JBU0UgKyBQSVhJU19TUEQpOworCWkgPSBpbl84KHBpeGlzX2Jhc2UgKyBQSVhJU19TUEQpOwogCWkgJj0gMHgzODsKIAlpID4+PSAzOwogCmRpZmYgLS1naXQgYS9ib2FyZC9mcmVlc2NhbGUvbXBjODU0NGRzL21wYzg1NDRkcy5jIGIvYm9hcmQvZnJlZXNjYWxlL21wYzg1NDRkcy9tcGM4NTQ0ZHMuYwppbmRleCAzNGJkYmFkLi5mZDU5ODM5IDEwMDY0NAotLS0gYS9ib2FyZC9mcmVlc2NhbGUvbXBjODU0NGRzL21wYzg1NDRkcy5jCisrKyBiL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NTQ0ZHMvbXBjODU0NGRzLmMKQEAgLTQzLDE0ICs0MywyMiBAQAogCXZvbGF0aWxlIGNjc3JfZ3VyX3QgKmd1ciA9ICh2b2lkICopKENPTkZJR19TWVNfTVBDODV4eF9HVVRTX0FERFIpOwogCXZvbGF0aWxlIGNjc3JfbGJjX3QgKmxiYyA9ICh2b2lkICopKENPTkZJR19TWVNfTVBDODV4eF9MQkNfQUREUik7CiAJdm9sYXRpbGUgY2Nzcl9sb2NhbF9lY21fdCAqZWNtID0gKHZvaWQgKikoQ09ORklHX1NZU19NUEM4NXh4X0VDTV9BRERSKTsKKwl1OCB2Ym9vdDsKKwl1OCAqcGl4aXNfYmFzZSA9ICh1OCAqKVBJWElTX0JBU0U7CiAKIAlpZiAoKHVpbnQpJmd1ci0+cG9ycGxsc3IgIT0gMHhlMDBlMDAwMCkgewogCQlwcmludGYoImltbWFwIHNpemUgZXJyb3IgJWx4XG4iLCh1bG9uZykmZ3VyLT5wb3JwbGxzcik7CiAJfQotCXByaW50ZiAoIkJvYXJkOiBNUEM4NTQ0RFMsIFN5c3RlbSBJRDogMHglMDJ4LCAiCi0JCSJTeXN0ZW0gVmVyc2lvbjogMHglMDJ4LCBGUEdBIFZlcnNpb246IDB4JTAyeFxuIiwKLQkJaW44KFBJWElTX0JBU0UgKyBQSVhJU19JRCksIGluOChQSVhJU19CQVNFICsgUElYSVNfVkVSKSwKLQkJaW44KFBJWElTX0JBU0UgKyBQSVhJU19QVkVSKSk7CisJcHJpbnRmICgiQm9hcmQ6IE1QQzg1NDREUywgU3lzIElEOiAweCUwMngsICIKKwkJIlN5cyBWZXI6IDB4JTAyeCwgRlBHQSBWZXI6IDB4JTAyeCwgIiwKKwkJaW5fOChwaXhpc19iYXNlICsgUElYSVNfSUQpLCBpbl84KHBpeGlzX2Jhc2UgKyBQSVhJU19WRVIpLAorCQlpbl84KHBpeGlzX2Jhc2UgKyBQSVhJU19QVkVSKSk7CisKKwl2Ym9vdCA9IGluXzgocGl4aXNfYmFzZSArIFBJWElTX1ZCT09UKTsKKwlpZiAodmJvb3QgJiBQSVhJU19WQk9PVF9GTUFQKQorCQlwcmludGYgKCJ2QmFuazogJWRcbiIsICgodmJvb3QgJiBQSVhJU19WQk9PVF9GQkFOSykgPj4gNikpOworCWVsc2UKKwkJcHV0cyAoIlByb21qZXRcbiIpOwogCiAJbGJjLT5sdGVzciA9IDB4ZmZmZmZmZmY7CS8qIENsZWFyIExCQyBlcnJvciBpbnRlcnJ1cHRzICovCiAJbGJjLT5sdGVpciA9IDB4ZmZmZmZmZmY7CS8qIEVuYWJsZSBMQkMgZXJyb3IgaW50ZXJydXB0cyAqLwpAQCAtMzgzLDExICszOTEsMTIgQEAKIHsKIAl1OCBpLCBnb19iaXQsIHJkX2Nsa3M7CiAJdWxvbmcgdmFsID0gMDsKKwl1OCAqcGl4aXNfYmFzZSA9ICh1OCAqKVBJWElTX0JBU0U7CiAKLQlnb19iaXQgPSBpbjgoUElYSVNfQkFTRSArIFBJWElTX1ZDVEwpOworCWdvX2JpdCA9IGluXzgocGl4aXNfYmFzZSArIFBJWElTX1ZDVEwpOwogCWdvX2JpdCAmPSAweDAxOwogCi0JcmRfY2xrcyA9IGluOChQSVhJU19CQVNFICsgUElYSVNfVkNGR0VOMCk7CisJcmRfY2xrcyA9IGluXzgocGl4aXNfYmFzZSArIFBJWElTX1ZDRkdFTjApOwogCXJkX2Nsa3MgJj0gMHgxQzsKIAogCS8qCkBAIC0zOTgsMTEgKzQwNywxMSBAQAogCiAJaWYgKGdvX2JpdCkgewogCQlpZiAocmRfY2xrcyA9PSAweDFjKQotCQkJaSA9IGluOChQSVhJU19CQVNFICsgUElYSVNfQVVYKTsKKwkJCWkgPSBpbl84KHBpeGlzX2Jhc2UgKyBQSVhJU19BVVgpOwogCQllbHNlCi0JCQlpID0gaW44KFBJWElTX0JBU0UgKyBQSVhJU19TUEQpOworCQkJaSA9IGluXzgocGl4aXNfYmFzZSArIFBJWElTX1NQRCk7CiAJfSBlbHNlIHsKLQkJaSA9IGluOChQSVhJU19CQVNFICsgUElYSVNfU1BEKTsKKwkJaSA9IGluXzgocGl4aXNfYmFzZSArIFBJWElTX1NQRCk7CiAJfQogCiAJaSAmPSAweDA3OwpkaWZmIC0tZ2l0IGEvYm9hcmQvZnJlZXNjYWxlL21wYzg1NzJkcy9tcGM4NTcyZHMuYyBiL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NTcyZHMvbXBjODU3MmRzLmMKaW5kZXggNGI5NTYxNy4uN2M4NjEzNCAxMDA2NDQKLS0tIGEvYm9hcmQvZnJlZXNjYWxlL21wYzg1NzJkcy9tcGM4NTcyZHMuYworKysgYi9ib2FyZC9mcmVlc2NhbGUvbXBjODU3MmRzL21wYzg1NzJkcy5jCkBAIC00MiwxNCArNDIsMzQgQEAKIAogaW50IGNoZWNrYm9hcmQgKHZvaWQpCiB7CisJdTggdmJvb3Q7CisJdTggKnBpeGlzX2Jhc2UgPSAodTggKilQSVhJU19CQVNFOworCiAJcHV0cyAoIkJvYXJkOiBNUEM4NTcyRFMgIik7CiAjaWZkZWYgQ09ORklHX1BIWVNfNjRCSVQKIAlwdXRzICgiKDM2LWJpdCBhZGRybWFwKSAiKTsKICNlbmRpZgogCXByaW50ZiAoIlN5cyBJRDogMHglMDJ4LCAiCi0JCSJTeXMgVmVyOiAweCUwMngsIEZQR0EgVmVyOiAweCUwMnhcbiIsCi0JCWluOChQSVhJU19CQVNFICsgUElYSVNfSUQpLCBpbjgoUElYSVNfQkFTRSArIFBJWElTX1ZFUiksCi0JCWluOChQSVhJU19CQVNFICsgUElYSVNfUFZFUikpOworCQkiU3lzIFZlcjogMHglMDJ4LCBGUEdBIFZlcjogMHglMDJ4LCAiLAorCQlpbl84KHBpeGlzX2Jhc2UgKyBQSVhJU19JRCksIGluXzgocGl4aXNfYmFzZSArIFBJWElTX1ZFUiksCisJCWluXzgocGl4aXNfYmFzZSArIFBJWElTX1BWRVIpKTsKKworCXZib290ID0gaW5fOChwaXhpc19iYXNlICsgUElYSVNfVkJPT1QpOworCXN3aXRjaCAoKHZib290ICYgUElYSVNfVkJPT1RfTEJNQVApID4+IDYpIHsKKwkJY2FzZSBQSVhJU19WQk9PVF9MQk1BUF9OT1IwOgorCQkJcHV0cyAoInZCYW5rOiAwXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIFBJWElTX1ZCT09UX0xCTUFQX1BKRVQ6CisJCQlwdXRzICgiUHJvbWpldFxuIik7CisJCQlicmVhazsKKwkJY2FzZSBQSVhJU19WQk9PVF9MQk1BUF9OQU5EOgorCQkJcHV0cyAoIk5BTkRcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgUElYSVNfVkJPT1RfTEJNQVBfTk9SMToKKwkJCXB1dHMgKCJ2QmFuazogMVxuIik7CisJCQlicmVhazsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDEyLDE5ICs0MzIsMjMgQEAKIAogdW5zaWduZWQgbG9uZyBnZXRfYm9hcmRfc3lzX2Nsayh1bG9uZyBkdW1teSkKIHsKKwl1OCAqcGl4aXNfYmFzZSA9ICh1OCAqKVBJWElTX0JBU0U7CisKIAlyZXR1cm4gaWNzMzA3X2Nsa19mcmVxICgKLQkJCWluOChQSVhJU19CQVNFICsgUElYSVNfVlNZU0NMSzApLAotCQkJaW44KFBJWElTX0JBU0UgKyBQSVhJU19WU1lTQ0xLMSksCi0JCQlpbjgoUElYSVNfQkFTRSArIFBJWElTX1ZTWVNDTEsyKQorCQkJaW5fOChwaXhpc19iYXNlICsgUElYSVNfVlNZU0NMSzApLAorCQkJaW5fOChwaXhpc19iYXNlICsgUElYSVNfVlNZU0NMSzEpLAorCQkJaW5fOChwaXhpc19iYXNlICsgUElYSVNfVlNZU0NMSzIpCiAJCQkpOwogfQogCiB1bnNpZ25lZCBsb25nIGdldF9ib2FyZF9kZHJfY2xrKHVsb25nIGR1bW15KQogeworCXU4ICpwaXhpc19iYXNlID0gKHU4ICopUElYSVNfQkFTRTsKKwogCXJldHVybiBpY3MzMDdfY2xrX2ZyZXEgKAotCQkJaW44KFBJWElTX0JBU0UgKyBQSVhJU19WRERSQ0xLMCksCi0JCQlpbjgoUElYSVNfQkFTRSArIFBJWElTX1ZERFJDTEsxKSwKLQkJCWluOChQSVhJU19CQVNFICsgUElYSVNfVkREUkNMSzIpCisJCQlpbl84KHBpeGlzX2Jhc2UgKyBQSVhJU19WRERSQ0xLMCksCisJCQlpbl84KHBpeGlzX2Jhc2UgKyBQSVhJU19WRERSQ0xLMSksCisJCQlpbl84KHBpeGlzX2Jhc2UgKyBQSVhJU19WRERSQ0xLMikKIAkJCSk7CiB9CiAjZWxzZQpAQCAtNDMyLDggKzQ1Niw5IEBACiB7CiAJdTggaTsKIAl1bG9uZyB2YWwgPSAwOworCXU4ICpwaXhpc19iYXNlID0gKHU4ICopUElYSVNfQkFTRTsKIAotCWkgPSBpbjgoUElYSVNfQkFTRSArIFBJWElTX1NQRCk7CisJaSA9IGluXzgocGl4aXNfYmFzZSArIFBJWElTX1NQRCk7CiAJaSAmPSAweDA3OwogCiAJc3dpdGNoIChpKSB7CkBAIC00NzAsOCArNDk1LDkgQEAKIHsKIAl1OCBpOwogCXVsb25nIHZhbCA9IDA7CisJdTggKnBpeGlzX2Jhc2UgPSAodTggKilQSVhJU19CQVNFOwogCi0JaSA9IGluOChQSVhJU19CQVNFICsgUElYSVNfU1BEKTsKKwlpID0gaW5fOChwaXhpc19iYXNlICsgUElYSVNfU1BEKTsKIAlpICY9IDB4Mzg7CiAJaSA+Pj0gMzsKIApkaWZmIC0tZ2l0IGEvYm9hcmQvZnJlZXNjYWxlL21wYzg2MTBocGNkL21wYzg2MTBocGNkLmMgYi9ib2FyZC9mcmVlc2NhbGUvbXBjODYxMGhwY2QvbXBjODYxMGhwY2QuYwppbmRleCBhODVlYmVhLi4yYWMxNjliIDEwMDY0NAotLS0gYS9ib2FyZC9mcmVlc2NhbGUvbXBjODYxMGhwY2QvbXBjODYxMGhwY2QuYworKysgYi9ib2FyZC9mcmVlc2NhbGUvbXBjODYxMGhwY2QvbXBjODYxMGhwY2QuYwpAQCAtNTUsMTYgKzU1LDE3IEBACiBpbnQgbWlzY19pbml0X3Iodm9pZCkKIHsKIAl1OCB0bXBfdmFsLCB2ZXJzaW9uOworCXU4ICpwaXhpc19iYXNlID0gKHU4ICopUElYSVNfQkFTRTsKIAogCS8qRG8gbm90IHVzZSA4MjU5UElDKi8KLQl0bXBfdmFsID0gaW44KFBJWElTX0JBU0UgKyBQSVhJU19CUkRDRkcwKTsKLQlvdXQ4KFBJWElTX0JBU0UgKyBQSVhJU19CUkRDRkcwLCB0bXBfdmFsIHwgMHg4MCk7CisJdG1wX3ZhbCA9IGluXzgocGl4aXNfYmFzZSArIFBJWElTX0JSRENGRzApOworCW91dF84KHBpeGlzX2Jhc2UgKyBQSVhJU19CUkRDRkcwLCB0bXBfdmFsIHwgMHg4MCk7CiAKIAkvKkZvciBGUEdBIFY3IG9yIGhpZ2hlciwgc2V0IHRoZSBJUlFNQVBTRUwgdG8gMCB0byB1c2UgTUFQMCBpbnRlcnJ1cHQqLwotCXZlcnNpb24gPSBpbjgoUElYSVNfQkFTRSArIFBJWElTX1BWRVIpOworCXZlcnNpb24gPSBpbl84KHBpeGlzX2Jhc2UgKyBQSVhJU19QVkVSKTsKIAlpZih2ZXJzaW9uID49IDB4MDcpIHsKLQkJdG1wX3ZhbCA9IGluOChQSVhJU19CQVNFICsgUElYSVNfQlJEQ0ZHMCk7Ci0JCW91dDgoUElYSVNfQkFTRSArIFBJWElTX0JSRENGRzAsIHRtcF92YWwgJiAweGJmKTsKKwkJdG1wX3ZhbCA9IGluXzgocGl4aXNfYmFzZSArIFBJWElTX0JSRENGRzApOworCQlvdXRfOChwaXhpc19iYXNlICsgUElYSVNfQlJEQ0ZHMCwgdG1wX3ZhbCAmIDB4YmYpOwogCX0KIAogCS8qIFVzaW5nIHRoaXMgZm9yIERJVSBpbml0IGJlZm9yZSB0aGUgZHJpdmVyIGluIGxpbnV4IHRha2VzIG92ZXIKQEAgLTk2LDExICs5NywxMiBAQAogewogCXZvbGF0aWxlIGltbWFwX3QgKmltbWFwID0gKGltbWFwX3QgKilDT05GSUdfU1lTX0lNTVI7CiAJdm9sYXRpbGUgY2Nzcl9sb2NhbF9tY21fdCAqbWNtID0gJmltbWFwLT5pbV9sb2NhbF9tY207CisJdTggKnBpeGlzX2Jhc2UgPSAodTggKilQSVhJU19CQVNFOwogCiAJcHJpbnRmICgiQm9hcmQ6IE1QQzg2MTBIUENELCBTeXN0ZW0gSUQ6IDB4JTAyeCwgIgogCQkiU3lzdGVtIFZlcnNpb246IDB4JTAyeCwgRlBHQSBWZXJzaW9uOiAweCUwMnhcbiIsCi0JCWluOChQSVhJU19CQVNFICsgUElYSVNfSUQpLCBpbjgoUElYSVNfQkFTRSArIFBJWElTX1ZFUiksCi0JCWluOChQSVhJU19CQVNFICsgUElYSVNfUFZFUikpOworCQlpbl84KHBpeGlzX2Jhc2UgKyBQSVhJU19JRCksIGluXzgocGl4aXNfYmFzZSArIFBJWElTX1ZFUiksCisJCWluXzgocGl4aXNfYmFzZSArIFBJWElTX1BWRVIpKTsKIAogCW1jbS0+YWJjciB8PSAweDAwMDEwMDAwOyAvKiAwICovCiAJbWNtLT5ocG1yMyA9IDB4ODAwMDAwMDg7IC8qIDRjICovCkBAIC0xNTQsNyArMTU2LDcgQEAKIAlkZHItPnRpbWluZ19jZmdfMCA9IDB4MDAyNjA4MDI7CiAJZGRyLT50aW1pbmdfY2ZnXzEgPSAweDM5MzVkMzIyOwogCWRkci0+dGltaW5nX2NmZ18yID0gMHgxNDkwNGNjODsKLQlkZHItPnNkcmFtX21vZGVfMSA9IDB4MDA0ODA0MzI7CisJZGRyLT5zZHJhbV9tb2RlID0gMHgwMDQ4MDQzMjsKIAlkZHItPnNkcmFtX21vZGVfMiA9IDB4MDAwMDAwMDA7CiAJZGRyLT5zZHJhbV9pbnRlcnZhbCA9IDB4MDYxODBmZmY7IC8qIDB4MDYxODAxMDA7ICovCiAJZGRyLT5zZHJhbV9kYXRhX2luaXQgPSAweERFQURCRUVGOwpAQCAtMTcwLDcgKzE3Miw3IEBACiAKIAl1ZGVsYXkoNTAwKTsKIAotCWRkci0+c2RyYW1fY2ZnXzEgPSAweGMzMDAwMDAwOyAvKiAweGUzMDA4MDAwOyovCisJZGRyLT5zZHJhbV9jZmcgPSAweGMzMDAwMDAwOyAvKiAweGUzMDA4MDAwOyovCiAKIAogI2lmIGRlZmluZWQoQ09ORklHX0VDQ19JTklUX1ZJQV9ERFJDT05UUk9MTEVSKQpAQCAtNDM4LDEwICs0NDAsOSBAQAogewogCXU4IGk7CiAJdWxvbmcgdmFsID0gMDsKLQl1bG9uZyBhOworCXU4ICpwaXhpc19iYXNlID0gKHU4ICopUElYSVNfQkFTRTsKIAotCWEgPSBQSVhJU19CQVNFICsgUElYSVNfU1BEOwotCWkgPSBpbjgoYSk7CisJaSA9IGluXzgocGl4aXNfYmFzZSArIFBJWElTX1NQRCk7CiAJaSAmPSAweDA3OwogCiAJc3dpdGNoIChpKSB7CkBAIC00ODEsNyArNDgyLDkgQEAKIAogdm9pZCBib2FyZF9yZXNldCh2b2lkKQogewotCW91dDgoUElYSVNfQkFTRSArIFBJWElTX1JTVCwgMCk7CisJdTggKnBpeGlzX2Jhc2UgPSAodTggKilQSVhJU19CQVNFOworCisJb3V0XzgocGl4aXNfYmFzZSArIFBJWElTX1JTVCwgMCk7CiAKIAl3aGlsZSAoMSkKIAkJOwpkaWZmIC0tZ2l0IGEvYm9hcmQvZnJlZXNjYWxlL21wYzg2MTBocGNkL21wYzg2MTBocGNkX2RpdS5jIGIvYm9hcmQvZnJlZXNjYWxlL21wYzg2MTBocGNkL21wYzg2MTBocGNkX2RpdS5jCmluZGV4IDYzZWJhMGMuLjQxODZhMmUgMTAwNjQ0Ci0tLSBhL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NjEwaHBjZC9tcGM4NjEwaHBjZF9kaXUuYworKysgYi9ib2FyZC9mcmVlc2NhbGUvbXBjODYxMGhwY2QvbXBjODYxMGhwY2RfZGl1LmMKQEAgLTY5LDkgKzY5LDEwIEBACiAJdW5zaWduZWQgaW50IHBpeGVsX2Zvcm1hdDsKIAl1bnNpZ25lZCBjaGFyIHRtcF92YWw7CiAJdW5zaWduZWQgY2hhciBwaXhpc19hcmNoOworCXU4ICpwaXhpc19iYXNlID0gKHU4ICopUElYSVNfQkFTRTsKIAotCXRtcF92YWwgPSBpbjgoUElYSVNfQkFTRSArIFBJWElTX0JSRENGRzApOwotCXBpeGlzX2FyY2ggPSBpbjgoUElYSVNfQkFTRSArIFBJWElTX1ZFUik7CisJdG1wX3ZhbCA9IGluXzgocGl4aXNfYmFzZSArIFBJWElTX0JSRENGRzApOworCXBpeGlzX2FyY2ggPSBpbl84KHBpeGlzX2Jhc2UgKyBQSVhJU19WRVIpOwogCiAJbW9uaXRvcl9wb3J0ID0gZ2V0ZW52KCJtb25pdG9yIik7CiAJaWYgKCFzdHJuY21wKG1vbml0b3JfcG9ydCwgIjAiLCAxKSkgewkvKiAwIC0gRFZJICovCkBAIC04MiwyOCArODMsMjggQEAKIAkJZWxzZQogCQkJcGl4ZWxfZm9ybWF0ID0gMHg4ODg4MzMxNjsKIAkJZ2FtbWFfZml4ID0gMDsKLQkJb3V0OChQSVhJU19CQVNFICsgUElYSVNfQlJEQ0ZHMCwgdG1wX3ZhbCB8IDB4MDgpOworCQlvdXRfOChwaXhpc19iYXNlICsgUElYSVNfQlJEQ0ZHMCwgdG1wX3ZhbCB8IDB4MDgpOwogCiAJfSBlbHNlIGlmICghc3RybmNtcChtb25pdG9yX3BvcnQsICIxIiwgMSkpIHsgLyogMSAtIFNpbmdsZSBsaW5rIExWRFMgKi8KIAkJeHJlcyA9IDEwMjQ7CiAJCXlyZXMgPSA3Njg7CiAJCXBpeGVsX2Zvcm1hdCA9IDB4ODg4ODMzMTY7CiAJCWdhbW1hX2ZpeCA9IDA7Ci0JCW91dDgoUElYSVNfQkFTRSArIFBJWElTX0JSRENGRzAsICh0bXBfdmFsICYgMHhmNykgfCAweDEwKTsKKwkJb3V0XzgocGl4aXNfYmFzZSArIFBJWElTX0JSRENGRzAsICh0bXBfdmFsICYgMHhmNykgfCAweDEwKTsKIAogCX0gZWxzZSBpZiAoIXN0cm5jbXAobW9uaXRvcl9wb3J0LCAiMiIsIDEpKSB7IC8qIDIgLSBEb3VibGUgbGluayBMVkRTICovCiAJCXhyZXMgPSAxMjgwOwogCQl5cmVzID0gMTAyNDsKIAkJcGl4ZWxfZm9ybWF0ID0gMHg4ODg4MzMxNjsKIAkJZ2FtbWFfZml4ID0gMTsKLQkJb3V0OChQSVhJU19CQVNFICsgUElYSVNfQlJEQ0ZHMCwgdG1wX3ZhbCAmIDB4ZTcpOworCQlvdXRfOChwaXhpc19iYXNlICsgUElYSVNfQlJEQ0ZHMCwgdG1wX3ZhbCAmIDB4ZTcpOwogCiAJfSBlbHNlIHsJLyogRFZJICovCiAJCXhyZXMgPSAxMjgwOwogCQl5cmVzID0gMTAyNDsKIAkJcGl4ZWxfZm9ybWF0ID0gMHg4ODg4MjMxNzsKIAkJZ2FtbWFfZml4ID0gMDsKLQkJb3V0OChQSVhJU19CQVNFICsgUElYSVNfQlJEQ0ZHMCwgdG1wX3ZhbCB8IDB4MDgpOworCQlvdXRfOChwaXhpc19iYXNlICsgUElYSVNfQlJEQ0ZHMCwgdG1wX3ZhbCB8IDB4MDgpOwogCX0KIAogCWZzbF9kaXVfaW5pdCh4cmVzLCBwaXhlbF9mb3JtYXQsIGdhbW1hX2ZpeCwKZGlmZiAtLWdpdCBhL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NjQxaHBjbi9tcGM4NjQxaHBjbi5jIGIvYm9hcmQvZnJlZXNjYWxlL21wYzg2NDFocGNuL21wYzg2NDFocGNuLmMKaW5kZXggNzQyMmU2Yi4uYThiMjExMiAxMDA2NDQKLS0tIGEvYm9hcmQvZnJlZXNjYWxlL21wYzg2NDFocGNuL21wYzg2NDFocGNuLmMKKysrIGIvYm9hcmQvZnJlZXNjYWxlL21wYzg2NDFocGNuL21wYzg2NDFocGNuLmMKQEAgLTQyLDEwICs0MiwyMCBAQAogCiBpbnQgY2hlY2tib2FyZCh2b2lkKQogewotCXByaW50ZiAoIkJvYXJkOiBNUEM4NjQxSFBDTiwgU3lzdGVtIElEOiAweCUwMngsICIKLQkJIlN5c3RlbSBWZXJzaW9uOiAweCUwMngsIEZQR0EgVmVyc2lvbjogMHglMDJ4XG4iLAotCQlpbjgoUElYSVNfQkFTRSArIFBJWElTX0lEKSwgaW44KFBJWElTX0JBU0UgKyBQSVhJU19WRVIpLAotCQlpbjgoUElYSVNfQkFTRSArIFBJWElTX1BWRVIpKTsKKwl1OCB2Ym9vdDsKKwl1OCAqcGl4aXNfYmFzZSA9ICh1OCAqKVBJWElTX0JBU0U7CisKKwlwcmludGYgKCJCb2FyZDogTVBDODY0MUhQQ04sIFN5cyBJRDogMHglMDJ4LCAiCisJCSJTeXMgVmVyOiAweCUwMngsIEZQR0EgVmVyOiAweCUwMngsICIsCisJCWluXzgocGl4aXNfYmFzZSArIFBJWElTX0lEKSwgaW5fOChwaXhpc19iYXNlICsgUElYSVNfVkVSKSwKKwkJaW5fOChwaXhpc19iYXNlICsgUElYSVNfUFZFUikpOworCisJdmJvb3QgPSBpbl84KHBpeGlzX2Jhc2UgKyBQSVhJU19WQk9PVCk7CisJaWYgKHZib290ICYgUElYSVNfVkJPT1RfRk1BUCkKKwkJcHJpbnRmICgidkJhbms6ICVkXG4iLCAoKHZib290ICYgUElYSVNfVkJPT1RfRkJBTkspID4+IDYpKTsKKwllbHNlCisJCXB1dHMgKCJQcm9tamV0XG4iKTsKKwogI2lmZGVmIENPTkZJR19QSFlTXzY0QklUCiAJcHJpbnRmICgiICAgICAgIDM2LWJpdCBwaHlzaWNhbCBhZGRyZXNzIG1hcFxuIik7CiAjZW5kaWYKQEAgLTkxLDcgKzEwMSw3IEBACiAJZGRyLT50aW1pbmdfY2ZnXzAgPSBDT05GSUdfU1lTX0REUl9USU1JTkdfMDsKIAlkZHItPnRpbWluZ19jZmdfMSA9IENPTkZJR19TWVNfRERSX1RJTUlOR18xOwogCWRkci0+dGltaW5nX2NmZ18yID0gQ09ORklHX1NZU19ERFJfVElNSU5HXzI7Ci0JZGRyLT5zZHJhbV9tb2RlXzEgPSBDT05GSUdfU1lTX0REUl9NT0RFXzE7CisJZGRyLT5zZHJhbV9tb2RlID0gQ09ORklHX1NZU19ERFJfTU9ERV8xOwogCWRkci0+c2RyYW1fbW9kZV8yID0gQ09ORklHX1NZU19ERFJfTU9ERV8yOwogCWRkci0+c2RyYW1faW50ZXJ2YWwgPSBDT05GSUdfU1lTX0REUl9JTlRFUlZBTDsKIAlkZHItPnNkcmFtX2RhdGFfaW5pdCA9IENPTkZJR19TWVNfRERSX0RBVEFfSU5JVDsKQEAgLTEwOSw5ICsxMTksOSBAQAogCiAjaWYgZGVmaW5lZCAoQ09ORklHX0REUl9FQ0MpCiAJLyogRW5hYmxlIEVDQyBjaGVja2luZyAqLwotCWRkci0+c2RyYW1fY2ZnXzEgPSAoQ09ORklHX1NZU19ERFJfQ09OVFJPTCB8IDB4MjAwMDAwMDApOworCWRkci0+c2RyYW1fY2ZnID0gKENPTkZJR19TWVNfRERSX0NPTlRST0wgfCAweDIwMDAwMDAwKTsKICNlbHNlCi0JZGRyLT5zZHJhbV9jZmdfMSA9IENPTkZJR19TWVNfRERSX0NPTlRST0w7CisJZGRyLT5zZHJhbV9jZmcgPSBDT05GSUdfU1lTX0REUl9DT05UUk9MOwogCWRkci0+c2RyYW1fY2ZnXzIgPSBDT05GSUdfU1lTX0REUl9DT05UUk9MMjsKICNlbmRpZgogCWFzbSgic3luYzsgaXN5bmMiKTsKQEAgLTMwMCwxMSArMzEwLDEyIEBACiB7CiAJdTggaSwgZ29fYml0LCByZF9jbGtzOwogCXVsb25nIHZhbCA9IDA7CisJdTggKnBpeGlzX2Jhc2UgPSAodTggKilQSVhJU19CQVNFOwogCi0JZ29fYml0ID0gaW44KFBJWElTX0JBU0UgKyBQSVhJU19WQ1RMKTsKKwlnb19iaXQgPSBpbl84KHBpeGlzX2Jhc2UgKyBQSVhJU19WQ1RMKTsKIAlnb19iaXQgJj0gMHgwMTsKIAotCXJkX2Nsa3MgPSBpbjgoUElYSVNfQkFTRSArIFBJWElTX1ZDRkdFTjApOworCXJkX2Nsa3MgPSBpbl84KHBpeGlzX2Jhc2UgKyBQSVhJU19WQ0ZHRU4wKTsKIAlyZF9jbGtzICY9IDB4MUM7CiAKIAkvKgpAQCAtMzE1LDExICszMjYsMTEgQEAKIAogCWlmIChnb19iaXQpIHsKIAkJaWYgKHJkX2Nsa3MgPT0gMHgxYykKLQkJCWkgPSBpbjgoUElYSVNfQkFTRSArIFBJWElTX0FVWCk7CisJCQlpID0gaW5fOChwaXhpc19iYXNlICsgUElYSVNfQVVYKTsKIAkJZWxzZQotCQkJaSA9IGluOChQSVhJU19CQVNFICsgUElYSVNfU1BEKTsKKwkJCWkgPSBpbl84KHBpeGlzX2Jhc2UgKyBQSVhJU19TUEQpOwogCX0gZWxzZSB7Ci0JCWkgPSBpbjgoUElYSVNfQkFTRSArIFBJWElTX1NQRCk7CisJCWkgPSBpbl84KHBpeGlzX2Jhc2UgKyBQSVhJU19TUEQpOwogCX0KIAogCWkgJj0gMHgwNzsKQEAgLTM2Myw3ICszNzQsOSBAQAogCiB2b2lkIGJvYXJkX3Jlc2V0KHZvaWQpCiB7Ci0Jb3V0OChQSVhJU19CQVNFICsgUElYSVNfUlNULCAwKTsKKwl1OCAqcGl4aXNfYmFzZSA9ICh1OCAqKVBJWElTX0JBU0U7CisKKwlvdXRfOChwaXhpc19iYXNlICsgUElYSVNfUlNULCAwKTsKIAogCXdoaWxlICgxKQogCQk7CmRpZmYgLS1naXQgYS9ib2FyZC9mcmVlc2NhbGUvcDIwMjBkcy9wMjAyMGRzLmMgYi9ib2FyZC9mcmVlc2NhbGUvcDIwMjBkcy9wMjAyMGRzLmMKaW5kZXggMjkzZTVhNC4uMTRkZTdlNyAxMDA2NDQKLS0tIGEvYm9hcmQvZnJlZXNjYWxlL3AyMDIwZHMvcDIwMjBkcy5jCisrKyBiL2JvYXJkL2ZyZWVzY2FsZS9wMjAyMGRzL3AyMDIwZHMuYwpAQCAtNDcsMTQgKzQ3LDMxIEBACiAKIGludCBjaGVja2JvYXJkKHZvaWQpCiB7CisJdTggc3c3OworCXU4ICpwaXhpc19iYXNlID0gKHU4ICopUElYSVNfQkFTRTsKKwogCXB1dHMoIkJvYXJkOiBQMjAyMERTICIpOwogI2lmZGVmIENPTkZJR19QSFlTXzY0QklUCiAJcHV0cygiKDM2LWJpdCBhZGRybWFwKSAiKTsKICNlbmRpZgorCiAJcHJpbnRmKCJTeXMgSUQ6IDB4JTAyeCwgIgotCQkiU3lzIFZlcjogMHglMDJ4LCBGUEdBIFZlcjogMHglMDJ4XG4iLAotCQlpbjgoUElYSVNfQkFTRSArIFBJWElTX0lEKSwgaW44KFBJWElTX0JBU0UgKyBQSVhJU19WRVIpLAotCQlpbjgoUElYSVNfQkFTRSArIFBJWElTX1BWRVIpKTsKKwkJIlN5cyBWZXI6IDB4JTAyeCwgRlBHQSBWZXI6IDB4JTAyeCwgIiwKKwkJaW5fOChwaXhpc19iYXNlICsgUElYSVNfSUQpLCBpbl84KHBpeGlzX2Jhc2UgKyBQSVhJU19WRVIpLAorCQlpbl84KHBpeGlzX2Jhc2UgKyBQSVhJU19QVkVSKSk7CisKKwlzdzcgPSBpbl84KHBpeGlzX2Jhc2UgKyBQSVhJU19TVyg3KSk7CisJc3dpdGNoICgoc3c3ICYgUElYSVNfU1c3X0xCTUFQKSA+PiA2KSB7CisJCWNhc2UgMDoKKwkJY2FzZSAxOgorCQkJcHJpbnRmICgidkJhbms6ICVkXG4iLCAoKHN3NyAmIFBJWElTX1NXN19WQkFOSykgPj4gNCkpOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJY2FzZSAzOgorCQkJcHV0cyAoIlByb21qZXRcbiIpOworCQkJYnJlYWs7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ2MiwxMCArNDc5LDEyIEBACiBjYWxjdWxhdGVfYm9hcmRfc3lzX2Nsayh1bG9uZyBkdW1teSkKIHsKIAl1bG9uZyB2YWw7CisJdTggKnBpeGlzX2Jhc2UgPSAodTggKilQSVhJU19CQVNFOworCiAJdmFsID0gaWNzMzA3X2Nsa19mcmVxKAotCSAgICBpbjgoUElYSVNfQkFTRSArIFBJWElTX1ZTWVNDTEswKSwKLQkgICAgaW44KFBJWElTX0JBU0UgKyBQSVhJU19WU1lTQ0xLMSksCi0JICAgIGluOChQSVhJU19CQVNFICsgUElYSVNfVlNZU0NMSzIpKTsKKwkgICAgaW5fOChwaXhpc19iYXNlICsgUElYSVNfVlNZU0NMSzApLAorCSAgICBpbl84KHBpeGlzX2Jhc2UgKyBQSVhJU19WU1lTQ0xLMSksCisJICAgIGluXzgocGl4aXNfYmFzZSArIFBJWElTX1ZTWVNDTEsyKSk7CiAJZGVidWcoInN5c2NsayB2YWwgPSAlbHVcbiIsIHZhbCk7CiAJcmV0dXJuIHZhbDsKIH0KQEAgLTQ3NCwxMCArNDkzLDEyIEBACiBjYWxjdWxhdGVfYm9hcmRfZGRyX2Nsayh1bG9uZyBkdW1teSkKIHsKIAl1bG9uZyB2YWw7CisJdTggKnBpeGlzX2Jhc2UgPSAodTggKilQSVhJU19CQVNFOworCiAJdmFsID0gaWNzMzA3X2Nsa19mcmVxKAotCSAgICBpbjgoUElYSVNfQkFTRSArIFBJWElTX1ZERFJDTEswKSwKLQkgICAgaW44KFBJWElTX0JBU0UgKyBQSVhJU19WRERSQ0xLMSksCi0JICAgIGluOChQSVhJU19CQVNFICsgUElYSVNfVkREUkNMSzIpKTsKKwkgICAgaW5fOChwaXhpc19iYXNlICsgUElYSVNfVkREUkNMSzApLAorCSAgICBpbl84KHBpeGlzX2Jhc2UgKyBQSVhJU19WRERSQ0xLMSksCisJICAgIGluXzgocGl4aXNfYmFzZSArIFBJWElTX1ZERFJDTEsyKSk7CiAJZGVidWcoImRkcmNsayB2YWwgPSAlbHVcbiIsIHZhbCk7CiAJcmV0dXJuIHZhbDsKIH0KQEAgLTQ4Niw4ICs1MDcsOSBAQAogewogCXU4IGk7CiAJdWxvbmcgdmFsID0gMDsKKwl1OCAqcGl4aXNfYmFzZSA9ICh1OCAqKVBJWElTX0JBU0U7CiAKLQlpID0gaW44KFBJWElTX0JBU0UgKyBQSVhJU19TUEQpOworCWkgPSBpbl84KHBpeGlzX2Jhc2UgKyBQSVhJU19TUEQpOwogCWkgJj0gMHgwNzsKIAogCXN3aXRjaCAoaSkgewpAQCAtNTI0LDggKzU0Niw5IEBACiB7CiAJdTggaTsKIAl1bG9uZyB2YWwgPSAwOworCXU4ICpwaXhpc19iYXNlID0gKHU4ICopUElYSVNfQkFTRTsKIAotCWkgPSBpbjgoUElYSVNfQkFTRSArIFBJWElTX1NQRCk7CisJaSA9IGluXzgocGl4aXNfYmFzZSArIFBJWElTX1NQRCk7CiAJaSAmPSAweDM4OwogCWkgPj49IDM7CiAKZGlmZiAtLWdpdCBhL2JvYXJkL3NiYzg2NDFkL3NiYzg2NDFkLmMgYi9ib2FyZC9zYmM4NjQxZC9zYmM4NjQxZC5jCmluZGV4IGMzOWQyYzAuLmYxMThhNmUgMTAwNjQ0Ci0tLSBhL2JvYXJkL3NiYzg2NDFkL3NiYzg2NDFkLmMKKysrIGIvYm9hcmQvc2JjODY0MWQvc2JjODY0MWQuYwpAQCAtMTI3LDkgKzEyNyw5IEBACiAJZGRyLT50aW1pbmdfY2ZnXzAgPSBDT05GSUdfU1lTX0REUl9USU1JTkdfMDsKIAlkZHItPnRpbWluZ19jZmdfMSA9IENPTkZJR19TWVNfRERSX1RJTUlOR18xOwogCWRkci0+dGltaW5nX2NmZ18yID0gQ09ORklHX1NZU19ERFJfVElNSU5HXzI7Ci0JZGRyLT5zZHJhbV9jZmdfMSA9IENPTkZJR19TWVNfRERSX0NGR18xQTsKKwlkZHItPnNkcmFtX2NmZyA9IENPTkZJR19TWVNfRERSX0NGR18xQTsKIAlkZHItPnNkcmFtX2NmZ18yID0gQ09ORklHX1NZU19ERFJfQ0ZHXzI7Ci0JZGRyLT5zZHJhbV9tb2RlXzEgPSBDT05GSUdfU1lTX0REUl9NT0RFXzE7CisJZGRyLT5zZHJhbV9tb2RlID0gQ09ORklHX1NZU19ERFJfTU9ERV8xOwogCWRkci0+c2RyYW1fbW9kZV8yID0gQ09ORklHX1NZU19ERFJfTU9ERV8yOwogCWRkci0+c2RyYW1fbW9kZV9jbnRsID0gQ09ORklHX1NZU19ERFJfTU9ERV9DVEw7CiAJZGRyLT5zZHJhbV9pbnRlcnZhbCA9IENPTkZJR19TWVNfRERSX0lOVEVSVkFMOwpAQCAtMTQwLDcgKzE0MCw3IEBACiAKIAl1ZGVsYXkgKDUwMCk7CiAKLQlkZHItPnNkcmFtX2NmZ18xID0gQ09ORklHX1NZU19ERFJfQ0ZHXzFCOworCWRkci0+c2RyYW1fY2ZnID0gQ09ORklHX1NZU19ERFJfQ0ZHXzFCOwogCWFzbSAoInN5bmM7IGlzeW5jIik7CiAKIAl1ZGVsYXkgKDUwMCk7CkBAIC0xNTgsOSArMTU4LDkgQEAKIAlkZHItPnRpbWluZ19jZmdfMCA9IENPTkZJR19TWVNfRERSMl9USU1JTkdfMDsKIAlkZHItPnRpbWluZ19jZmdfMSA9IENPTkZJR19TWVNfRERSMl9USU1JTkdfMTsKIAlkZHItPnRpbWluZ19jZmdfMiA9IENPTkZJR19TWVNfRERSMl9USU1JTkdfMjsKLQlkZHItPnNkcmFtX2NmZ18xID0gQ09ORklHX1NZU19ERFIyX0NGR18xQTsKKwlkZHItPnNkcmFtX2NmZyA9IENPTkZJR19TWVNfRERSMl9DRkdfMUE7CiAJZGRyLT5zZHJhbV9jZmdfMiA9IENPTkZJR19TWVNfRERSMl9DRkdfMjsKLQlkZHItPnNkcmFtX21vZGVfMSA9IENPTkZJR19TWVNfRERSMl9NT0RFXzE7CisJZGRyLT5zZHJhbV9tb2RlID0gQ09ORklHX1NZU19ERFIyX01PREVfMTsKIAlkZHItPnNkcmFtX21vZGVfMiA9IENPTkZJR19TWVNfRERSMl9NT0RFXzI7CiAJZGRyLT5zZHJhbV9tb2RlX2NudGwgPSBDT05GSUdfU1lTX0REUjJfTU9ERV9DVEw7CiAJZGRyLT5zZHJhbV9pbnRlcnZhbCA9IENPTkZJR19TWVNfRERSMl9JTlRFUlZBTDsKQEAgLTE3MSw3ICsxNzEsNyBAQAogCiAJdWRlbGF5ICg1MDApOwogCi0JZGRyLT5zZHJhbV9jZmdfMSA9IENPTkZJR19TWVNfRERSMl9DRkdfMUI7CisJZGRyLT5zZHJhbV9jZmcgPSBDT05GSUdfU1lTX0REUjJfQ0ZHXzFCOwogCWFzbSAoInN5bmM7IGlzeW5jIik7CiAKIAl1ZGVsYXkgKDUwMCk7CmRpZmYgLS1naXQgYS9ib2FyZC90cWMvdHFtODV4eC9zZHJhbS5jIGIvYm9hcmQvdHFjL3RxbTg1eHgvc2RyYW0uYwppbmRleCA2ZDczYTg4Li41MDNjNWU1IDEwMDY0NAotLS0gYS9ib2FyZC90cWMvdHFtODV4eC9zZHJhbS5jCisrKyBiL2JvYXJkL3RxYy90cW04NXh4L3NkcmFtLmMKQEAgLTM3NCwzMSArMzc0LDYgQEAKIAlyZXR1cm4gKGkgPCBOX0REUl9DU19DT05GKSA/IGRkcl9jc19jb25mW2ldLnNpemUgOiAwOwogfQogCi12b2lkIGJvYXJkX2FkZF9yYW1faW5mbyAoaW50IHVzZV9kZWZhdWx0KQotewotCWludCBjYXNsOwotCi0JaWYgKHVzZV9kZWZhdWx0KQotCQljYXNsID0gQ09ORklHX0REUl9ERUZBVUxUX0NMOwotCWVsc2UKLQkJY2FzbCA9IGNhc19sYXRlbmN5ICgpOwotCi0JcHV0cyAoIiAoQ0w9Iik7Ci0Jc3dpdGNoIChjYXNsKSB7Ci0JY2FzZSAyMDoKLQkJcHV0cyAoIjIpIik7Ci0JCWJyZWFrOwotCi0JY2FzZSAyNToKLQkJcHV0cyAoIjIuNSkiKTsKLQkJYnJlYWs7Ci0KLQljYXNlIDMwOgotCQlwdXRzICgiMykiKTsKLQkJYnJlYWs7Ci0JfQotfQotCiBwaHlzX3NpemVfdCBpbml0ZHJhbSAoaW50IGJvYXJkX3R5cGUpCiB7CiAJbG9uZyBkcmFtX3NpemUgPSAwOwpAQCAtNDM4LDExICs0MTMsOSBAQAogCQkvKgogCQkgKiBUcnkgYWdhaW4gd2l0aCBkZWZhdWx0IENBUyBsYXRlbmN5CiAJCSAqLwotCQlwdXRzICgiUHJvYmxlbSB3aXRoIENBUyBsYW50ZW5jeSIpOwotCQlib2FyZF9hZGRfcmFtX2luZm8gKDEpOwotCQlwdXRzICgiLCB1c2luZyBkZWZhdWx0IENMIVxuIik7Ci0JCWNhc2wgPSBDT05GSUdfRERSX0RFRkFVTFRfQ0w7Ci0JCWRyYW1fc2l6ZSA9IHNkcmFtX3NldHVwIChjYXNsKTsKKwkJcHJpbnRmICgiUHJvYmxlbSB3aXRoIENBUyBsYW50ZW5jeSwgdXNpbmcgZGVmYXVsdCBDTCAlZC8xMCFcbiIsCisJCQlDT05GSUdfRERSX0RFRkFVTFRfQ0wpOworCQlkcmFtX3NpemUgPSBzZHJhbV9zZXR1cCAoQ09ORklHX0REUl9ERUZBVUxUX0NMKTsKIAkJcHV0cyAoIiAgICAgICAiKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2JvYXJkL3hlcy9jb21tb24vZnNsXzh4eHhfZGRyLmMgYi9ib2FyZC94ZXMvY29tbW9uL2ZzbF84eHh4X2Rkci5jCmluZGV4IGVjNjRlZmEuLjgxZWU3MGQgMTAwNjQ0Ci0tLSBhL2JvYXJkL3hlcy9jb21tb24vZnNsXzh4eHhfZGRyLmMKKysrIGIvYm9hcmQveGVzL2NvbW1vbi9mc2xfOHh4eF9kZHIuYwpAQCAtNDQsNTYgKzQ0LDMgQEAKIAogCXJldHVybiBkcmFtX3NpemU7CiB9Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19ERFJfRUNDKSB8fCAoQ09ORklHX05VTV9ERFJfQ09OVFJPTExFUlMgPiAxKQotdm9pZCBib2FyZF9hZGRfcmFtX2luZm8oaW50IHVzZV9kZWZhdWx0KQotewotI2lmIChDT05GSUdfTlVNX0REUl9DT05UUk9MTEVSUyA+IDEpCi0jaWYgZGVmaW5lZChDT05GSUdfTVBDODV4eCkKLQl2b2xhdGlsZSBjY3NyX2Rkcl90ICpkZHIxID0gKHZvaWQgKikoQ09ORklHX1NZU19NUEM4NXh4X0REUl9BRERSKTsKLSNlbGlmIGRlZmluZWQoQ09ORklHX01QQzg2eHgpCi0Jdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKUNPTkZJR19TWVNfSU1NUjsKLQl2b2xhdGlsZSBjY3NyX2Rkcl90ICpkZHIxID0gJmltbWFwLT5pbV9kZHIxOwotI2VuZGlmCi0jZW5kaWYKLQotCXB1dHMoIiAoIik7Ci0KLSNpZiAoQ09ORklHX05VTV9ERFJfQ09OVFJPTExFUlMgPiAxKQotCS8qIFByaW50IGludGVybGVhdmluZyBpbmZvcm1hdGlvbiAqLwotCWlmIChkZHIxLT5jczBfY29uZmlnICYgMHgyMDAwMDAwMCkgewotCQlzd2l0Y2ggKChkZHIxLT5jczBfY29uZmlnID4+IDI0KSAmIDB4ZikgewotCQljYXNlIDA6Ci0JCQlwdXRzKCJjYWNoZSBsaW5lIik7Ci0JCQlicmVhazsKLQkJY2FzZSAxOgotCQkJcHV0cygicGFnZSIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMjoKLQkJCXB1dHMoImJhbmsiKTsKLQkJCWJyZWFrOwotCQljYXNlIDM6Ci0JCQlwdXRzKCJzdXBlci1iYW5rIik7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXB1dHMoImludmFsaWQiKTsKLQkJCWJyZWFrOwotCQl9Ci0JfSBlbHNlIHsKLQkJcHV0cygibm8iKTsKLQl9Ci0KLQlwdXRzKCIgaW50ZXJsZWF2aW5nIik7Ci0jZW5kaWYKLQotI2lmIChDT05GSUdfTlVNX0REUl9DT05UUk9MTEVSUyA+IDEpICYmIGRlZmluZWQoQ09ORklHX0REUl9FQ0MpCi0JcHV0cygiLCAiKTsKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfRERSX0VDQykKLQlwdXRzKCJFQ0MgZW5hYmxlZCIpOwotI2VuZGlmCi0KLQlwdXRzKCIpIik7Ci19Ci0jZW5kaWYgLyogQ09ORklHX0REUl9FQ0MgfHwgQ09ORklHX05VTV9ERFJfQ09OVFJPTExFUlMgPiAxICovCmRpZmYgLS1naXQgYS9ib2FyZC94ZXMveHBlZGl0ZTUzNzAveHBlZGl0ZTUzNzAuYyBiL2JvYXJkL3hlcy94cGVkaXRlNTM3MC94cGVkaXRlNTM3MC5jCmluZGV4IDIyY2YyOTQuLmQ1NGM2OTkgMTAwNjQ0Ci0tLSBhL2JvYXJkL3hlcy94cGVkaXRlNTM3MC94cGVkaXRlNTM3MC5jCisrKyBiL2JvYXJkL3hlcy94cGVkaXRlNTM3MC94cGVkaXRlNTM3MC5jCkBAIC04NCw4ICs4NCw4IEBACiAJLyogSW5pdGlhbGl6ZSBQQ0E5NTU3IGRldmljZXMgKi8KIAlwY2E5NTN4X3NldF9wb2woQ09ORklHX1NZU19JMkNfUENBOTUzWF9BRERSMCwgMHhmZiwgMCk7CiAJcGNhOTUzeF9zZXRfcG9sKENPTkZJR19TWVNfSTJDX1BDQTk1M1hfQUREUjEsIDB4ZmYsIDApOwotCXBjYTk1M3hfc2V0X3BvbChDT05GSUdfU1lTX0kyQ19QQ0E5NTNYX0FERFIwLCAweGZmLCAwKTsKLQlwY2E5NTN4X3NldF9wb2woQ09ORklHX1NZU19JMkNfUENBOTUzWF9BRERSMCwgMHhmZiwgMCk7CisJcGNhOTUzeF9zZXRfcG9sKENPTkZJR19TWVNfSTJDX1BDQTk1M1hfQUREUjIsIDB4ZmYsIDApOworCXBjYTk1M3hfc2V0X3BvbChDT05GSUdfU1lTX0kyQ19QQ0E5NTNYX0FERFIzLCAweGZmLCAwKTsKIAogCS8qCiAJICogUmVtYXAgTk9SIGZsYXNoIHJlZ2lvbiB0byBjYWNoaW5nLWluaGliaXRlZApkaWZmIC0tZ2l0IGEvY29tbW9uL2NtZF9ib290bS5jIGIvY29tbW9uL2NtZF9ib290bS5jCmluZGV4IDM2N2Q1YTcuLjVkNWRkMzMgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9jbWRfYm9vdG0uYworKysgYi9jb21tb24vY21kX2Jvb3RtLmMKQEAgLTUyLDkgKzUyLDggQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0xaTUEKLSNkZWZpbmUgXzdaSVBfQllURV9ERUZJTkVEIC8qIEJ5dGUgYWxyZWFkeSBkZWZpbmVkIGJ5IHpsaWIgKi8KICNpbmNsdWRlIDxsem1hL0x6bWFUeXBlcy5oPgotI2luY2x1ZGUgPGx6bWEvTHptYURlY29kZS5oPgorI2luY2x1ZGUgPGx6bWEvTHptYURlYy5oPgogI2luY2x1ZGUgPGx6bWEvTHptYVRvb2xzLmg+CiAjZW5kaWYgLyogQ09ORklHX0xaTUEgKi8KIApAQCAtMzkwLDcgKzM4OSw3IEBACiAJCWludCByZXQgPSBsem1hQnVmZlRvQnVmZkRlY29tcHJlc3MoCiAJCQkodW5zaWduZWQgY2hhciAqKWxvYWQsICZ1bmNfbGVuLAogCQkJKHVuc2lnbmVkIGNoYXIgKilpbWFnZV9zdGFydCwgaW1hZ2VfbGVuKTsKLQkJaWYgKHJldCAhPSBMWk1BX1JFU1VMVF9PSykgeworCQlpZiAocmV0ICE9IFNaX09LKSB7CiAJCQlwcmludGYgKCJMWk1BOiB1bmNvbXByZXNzIG9yIG92ZXJ3cml0ZSBlcnJvciAlZCAiCiAJCQkJIi0gbXVzdCBSRVNFVCBib2FyZCB0byByZWNvdmVyXG4iLCByZXQpOwogCQkJc2hvd19ib290X3Byb2dyZXNzICgtNik7CmRpZmYgLS1naXQgYS9jcHUvbXBjODZ4eC9kZHItODY0MS5jIGIvY3B1L21wYzg2eHgvZGRyLTg2NDEuYwppbmRleCA1MWQwMTAyLi5iOGYyYzkzIDEwMDY0NAotLS0gYS9jcHUvbXBjODZ4eC9kZHItODY0MS5jCisrKyBiL2NwdS9tcGM4Nnh4L2Rkci04NjQxLmMKQEAgLTU2LDcgKzU2LDcgQEAKIAlvdXRfYmUzMigmZGRyLT50aW1pbmdfY2ZnXzEsIHJlZ3MtPnRpbWluZ19jZmdfMSk7CiAJb3V0X2JlMzIoJmRkci0+dGltaW5nX2NmZ18yLCByZWdzLT50aW1pbmdfY2ZnXzIpOwogCW91dF9iZTMyKCZkZHItPnNkcmFtX2NmZ18yLCByZWdzLT5kZHJfc2RyYW1fY2ZnXzIpOwotCW91dF9iZTMyKCZkZHItPnNkcmFtX21vZGVfMSwgcmVncy0+ZGRyX3NkcmFtX21vZGUpOworCW91dF9iZTMyKCZkZHItPnNkcmFtX21vZGUsIHJlZ3MtPmRkcl9zZHJhbV9tb2RlKTsKIAlvdXRfYmUzMigmZGRyLT5zZHJhbV9tb2RlXzIsIHJlZ3MtPmRkcl9zZHJhbV9tb2RlXzIpOwogCW91dF9iZTMyKCZkZHItPnNkcmFtX21vZGVfY250bCwgcmVncy0+ZGRyX3NkcmFtX21kX2NudGwpOwogCW91dF9iZTMyKCZkZHItPnNkcmFtX2ludGVydmFsLCByZWdzLT5kZHJfc2RyYW1faW50ZXJ2YWwpOwpAQCAtNzQsNyArNzQsNyBAQAogCXVkZWxheSgyMDApOwogCWFzbSB2b2xhdGlsZSgic3luYztpc3luYyIpOwogCi0Jb3V0X2JlMzIoJmRkci0+c2RyYW1fY2ZnXzEsIHJlZ3MtPmRkcl9zZHJhbV9jZmcpOworCW91dF9iZTMyKCZkZHItPnNkcmFtX2NmZywgcmVncy0+ZGRyX3NkcmFtX2NmZyk7CiAKIAkvKgogCSAqIFBvbGwgRERSX1NEUkFNX0NGR18yW0RfSU5JVF0gYml0IHVudGlsIGF1dG8tZGF0YSBpbml0IGlzIGRvbmUKZGlmZiAtLWdpdCBhL2NwdS9tcGM4eHh4L2Rkci9tYWluLmMgYi9jcHUvbXBjOHh4eC9kZHIvbWFpbi5jCmluZGV4IDZkYWUyNmIuLmZhYTFhZjkgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4eHh4L2Rkci9tYWluLmMKKysrIGIvY3B1L21wYzh4eHgvZGRyL21haW4uYwpAQCAtMTYyLDI4ICsxNjIsOSBAQAogCQkJaisrOwogCQl9CiAJfQotCWlmIChqID09IDIpIHsKKwlpZiAoaiA9PSAyKQogCQkqbWVtY3RsX2ludGVybGVhdmluZyA9IDE7CiAKLQkJcHJpbnRmKCJcbk1lbW9yeSBjb250cm9sbGVyIGludGVybGVhdmluZyBlbmFibGVkOiAiKTsKLQotCQlzd2l0Y2ggKHBpbmZvLT5tZW1jdGxfb3B0c1swXS5tZW1jdGxfaW50ZXJsZWF2aW5nX21vZGUpIHsKLQkJY2FzZSBGU0xfRERSX0NBQ0hFX0xJTkVfSU5URVJMRUFWSU5HOgotCQkJcHJpbnRmKCJDYWNoZS1saW5lIGludGVybGVhdmluZyFcbiIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgRlNMX0REUl9QQUdFX0lOVEVSTEVBVklORzoKLQkJCXByaW50ZigiUGFnZSBpbnRlcmxlYXZpbmchXG4iKTsKLQkJCWJyZWFrOwotCQljYXNlIEZTTF9ERFJfQkFOS19JTlRFUkxFQVZJTkc6Ci0JCQlwcmludGYoIkJhbmsgaW50ZXJsZWF2aW5nIVxuIik7Ci0JCQlicmVhazsKLQkJY2FzZSBGU0xfRERSX1NVUEVSQkFOS19JTlRFUkxFQVZJTkc6Ci0JCQlwcmludGYoIlN1cGVyIGJhbmsgaW50ZXJsZWF2aW5nXG4iKTsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9Ci0JfQotCiAJLyogQ2hlY2sgdGhhdCBhbGwgY29udHJvbGxlcnMgYXJlIHJhbmsgaW50ZXJsZWF2aW5nLiAqLwogCWogPSAwOwogCWZvciAoaSA9IDA7IGkgPCBDT05GSUdfTlVNX0REUl9DT05UUk9MTEVSUzsgaSsrKSB7CkBAIC0xOTEsMjkgKzE3Miw5IEBACiAJCQlqKys7CiAJCX0KIAl9Ci0JaWYgKGogPT0gMikgeworCWlmIChqID09IDIpCiAJCSpyYW5rX2ludGVybGVhdmluZyA9IDE7CiAKLQkJcHJpbnRmKCJCYW5rKGNoaXAtc2VsZWN0KSBpbnRlcmxlYXZpbmcgZW5hYmxlZDogIik7Ci0KLQkJc3dpdGNoIChwaW5mby0+bWVtY3RsX29wdHNbMF0uYmFfaW50bHZfY3RsICYKLQkJCQkJCUZTTF9ERFJfQ1MwX0NTMV9DUzJfQ1MzKSB7Ci0JCWNhc2UgRlNMX0REUl9DUzBfQ1MxX0NTMl9DUzM6Ci0JCQlwcmludGYoIkNTMCtDUzErQ1MyK0NTM1xuIik7Ci0JCQlicmVhazsKLQkJY2FzZSBGU0xfRERSX0NTMF9DUzE6Ci0JCQlwcmludGYoIkNTMCtDUzFcbiIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgRlNMX0REUl9DUzJfQ1MzOgotCQkJcHJpbnRmKCJDUzIrQ1MzXG4iKTsKLQkJCWJyZWFrOwotCQljYXNlIEZTTF9ERFJfQ1MwX0NTMV9BTkRfQ1MyX0NTMzoKLQkJCXByaW50ZigiQ1MwK0NTMSBhbmQgQ1MyK0NTM1xuIik7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCX0KLQogCWlmICgqbWVtY3RsX2ludGVybGVhdmluZykgewogCQl1bnNpZ25lZCBsb25nIGxvbmcgYWRkciwgdG90YWxfbWVtX3Blcl9jdGxyID0gMDsKIAkJLyoKZGlmZiAtLWdpdCBhL2NwdS9tcGM4eHh4L2Rkci91dGlsLmMgYi9jcHUvbXBjOHh4eC9kZHIvdXRpbC5jCmluZGV4IDcwZGJlZTAuLjQ0NTE5ODkgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4eHh4L2Rkci91dGlsLmMKKysrIGIvY3B1L21wYzh4eHgvZGRyL3V0aWwuYwpAQCAtMTA3LDMgKzEwNyw5OSBAQAogZnNsX2Rkcl9zZXRfbGF3YmFyKGNvbnN0IGNvbW1vbl90aW1pbmdfcGFyYW1zX3QgKm1lbWN0bF9jb21tb25fcGFyYW1zLAogCQkJIHVuc2lnbmVkIGludCBtZW1jdGxfaW50ZXJsZWF2ZWQsCiAJCQkgdW5zaWduZWQgaW50IGN0cmxfbnVtKTsKKwordm9pZCBib2FyZF9hZGRfcmFtX2luZm8oaW50IHVzZV9kZWZhdWx0KQoreworI2lmIGRlZmluZWQoQ09ORklHX01QQzg1eHgpCisJdm9sYXRpbGUgY2Nzcl9kZHJfdCAqZGRyID0gKHZvaWQgKikoQ09ORklHX1NZU19NUEM4NXh4X0REUl9BRERSKTsKKyNlbGlmIGRlZmluZWQoQ09ORklHX01QQzg2eHgpCisJdm9sYXRpbGUgY2Nzcl9kZHJfdCAqZGRyID0gKHZvaWQgKikoQ09ORklHX1NZU19NUEM4Nnh4X0REUl9BRERSKTsKKyNlbmRpZgorI2lmIChDT05GSUdfTlVNX0REUl9DT05UUk9MTEVSUyA+IDEpCisJdWludDMyX3QgY3MwX2NvbmZpZyA9IGluX2JlMzIoJmRkci0+Y3MwX2NvbmZpZyk7CisjZW5kaWYKKwl1aW50MzJfdCBzZHJhbV9jZmcgPSBpbl9iZTMyKCZkZHItPnNkcmFtX2NmZyk7CisJaW50IGNhc19sYXQ7CisKKwlwdXRzKCIgKEREUiIpOworCXN3aXRjaCAoKHNkcmFtX2NmZyAmIFNEUkFNX0NGR19TRFJBTV9UWVBFX01BU0spID4+CisJCVNEUkFNX0NGR19TRFJBTV9UWVBFX1NISUZUKSB7CisJY2FzZSBTRFJBTV9UWVBFX0REUjE6CisJCXB1dHMoIjEiKTsKKwkJYnJlYWs7CisJY2FzZSBTRFJBTV9UWVBFX0REUjI6CisJCXB1dHMoIjIiKTsKKwkJYnJlYWs7CisJY2FzZSBTRFJBTV9UWVBFX0REUjM6CisJCXB1dHMoIjMiKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHV0cygiPyIpOworCQlicmVhazsKKwl9CisKKwlpZiAoc2RyYW1fY2ZnICYgU0RSQU1fQ0ZHXzMyX0JFKQorCQlwdXRzKCIsIDMyLWJpdCIpOworCWVsc2UKKwkJcHV0cygiLCA2NC1iaXQiKTsKKworCS8qIENhbGN1bGF0ZSBDQVMgbGF0ZW5jeSBiYXNlZCBvbiB0aW1pbmcgY2ZnIHZhbHVlcyAqLworCWNhc19sYXQgPSAoKGluX2JlMzIoJmRkci0+dGltaW5nX2NmZ18xKSA+PiAxNikgJiAweGYpICsgMTsKKwlpZiAoKGluX2JlMzIoJmRkci0+dGltaW5nX2NmZ18zKSA+PiAxMikgJiAxKQorCQljYXNfbGF0ICs9ICg4IDw8IDEpOworCXByaW50ZigiLCBDTD0lZCIsIGNhc19sYXQgPj4gMSk7CisJaWYgKGNhc19sYXQgJiAweDEpCisJCXB1dHMoIi41Iik7CisKKwlpZiAoc2RyYW1fY2ZnICYgU0RSQU1fQ0ZHX0VDQ19FTikKKwkJcHV0cygiLCBFQ0Mgb24pIik7CisJZWxzZQorCQlwdXRzKCIsIEVDQyBvZmYpIik7CisKKyNpZiAoQ09ORklHX05VTV9ERFJfQ09OVFJPTExFUlMgPiAxKQorCWlmIChjczBfY29uZmlnICYgMHgyMDAwMDAwMCkgeworCQlwdXRzKCJcbiIpOworCQlwdXRzKCIgICAgICAgRERSIENvbnRyb2xsZXIgSW50ZXJsZWF2aW5nIE1vZGU6ICIpOworCisJCXN3aXRjaCAoKGNzMF9jb25maWcgPj4gMjQpICYgMHhmKSB7CisJCWNhc2UgRlNMX0REUl9DQUNIRV9MSU5FX0lOVEVSTEVBVklORzoKKwkJCXB1dHMoImNhY2hlIGxpbmUiKTsKKwkJCWJyZWFrOworCQljYXNlIEZTTF9ERFJfUEFHRV9JTlRFUkxFQVZJTkc6CisJCQlwdXRzKCJwYWdlIik7CisJCQlicmVhazsKKwkJY2FzZSBGU0xfRERSX0JBTktfSU5URVJMRUFWSU5HOgorCQkJcHV0cygiYmFuayIpOworCQkJYnJlYWs7CisJCWNhc2UgRlNMX0REUl9TVVBFUkJBTktfSU5URVJMRUFWSU5HOgorCQkJcHV0cygic3VwZXItYmFuayIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwdXRzKCJpbnZhbGlkIik7CisJCQlicmVhazsKKwkJfQorCX0KKyNlbmRpZgorCisJaWYgKChzZHJhbV9jZmcgPj4gOCkgJiAweDdmKSB7CisJCXB1dHMoIlxuIik7CisJCXB1dHMoIiAgICAgICBERFIgQ2hpcC1TZWxlY3QgSW50ZXJsZWF2aW5nIE1vZGU6ICIpOworCQlzd2l0Y2goc2RyYW1fY2ZnID4+IDggJiAweDdmKSB7CisJCWNhc2UgRlNMX0REUl9DUzBfQ1MxX0NTMl9DUzM6CisJCQlwdXRzKCJDUzArQ1MxK0NTMitDUzMiKTsKKwkJCWJyZWFrOworCQljYXNlIEZTTF9ERFJfQ1MwX0NTMToKKwkJCXB1dHMoIkNTMCtDUzEiKTsKKwkJCWJyZWFrOworCQljYXNlIEZTTF9ERFJfQ1MyX0NTMzoKKwkJCXB1dHMoIkNTMitDUzMiKTsKKwkJCWJyZWFrOworCQljYXNlIEZTTF9ERFJfQ1MwX0NTMV9BTkRfQ1MyX0NTMzoKKwkJCXB1dHMoIkNTMCtDUzEgYW5kIENTMitDUzMiKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHV0cygiaW52YWxpZCIpOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9hcGlfZXhhbXBsZXMvLmdpdGlnbm9yZSBiL2V4YW1wbGVzL2FwaS8uZ2l0aWdub3JlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcGlfZXhhbXBsZXMvLmdpdGlnbm9yZQpyZW5hbWUgdG8gZXhhbXBsZXMvYXBpLy5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL2FwaV9leGFtcGxlcy9NYWtlZmlsZSBiL2V4YW1wbGVzL2FwaS9NYWtlZmlsZQpzaW1pbGFyaXR5IGluZGV4IDkxJQpyZW5hbWUgZnJvbSBhcGlfZXhhbXBsZXMvTWFrZWZpbGUKcmVuYW1lIHRvIGV4YW1wbGVzL2FwaS9NYWtlZmlsZQppbmRleCAyYTMwYmVmLi4yZDA1YTAxIDEwMDY0NAotLS0gYS9hcGlfZXhhbXBsZXMvTWFrZWZpbGUKKysrIGIvZXhhbXBsZXMvYXBpL01ha2VmaWxlCkBAIC0zMywxMyArMzMsMTMgQEAKIE9VVFBVVC0kKENPTkZJR19BUEkpID0gJChvYmopZGVtbwogT1VUUFVUID0gJChPVVRQVVQteSkKIAotIyBTb3VyY2UgZmlsZXMgbG9jYXRlZCBpbiB0aGUgYXBpX2V4YW1wbGVzIGRpcmVjdG9yeQorIyBTb3VyY2UgZmlsZXMgbG9jYXRlZCBpbiB0aGUgZXhhbXBsZXMvYXBpIGRpcmVjdG9yeQogU09CSl9GSUxFUy0kKENPTkZJR19BUEkpICs9IGNydDAubwogQ09CSl9GSUxFUy0kKENPTkZJR19BUEkpICs9IGRlbW8ubwogQ09CSl9GSUxFUy0kKENPTkZJR19BUEkpICs9IGdsdWUubwogQ09CSl9GSUxFUy0kKENPTkZJR19BUEkpICs9IGxpYmdlbndyYXAubwogCi0jIFNvdXJjZSBmaWxlcyB3aGljaCBleGlzdCBvdXRzaWRlIHRoZSBhcGlfZXhhbXBsZXMgZGlyZWN0b3J5CisjIFNvdXJjZSBmaWxlcyB3aGljaCBleGlzdCBvdXRzaWRlIHRoZSBleGFtcGxlcy9hcGkgZGlyZWN0b3J5CiBFWFRfQ09CSl9GSUxFUy0kKENPTkZJR19BUEkpICs9IGxpYl9nZW5lcmljL2NyYzMyLm8KIEVYVF9DT0JKX0ZJTEVTLSQoQ09ORklHX0FQSSkgKz0gbGliX2dlbmVyaWMvY3R5cGUubwogRVhUX0NPQkpfRklMRVMtJChDT05GSUdfQVBJKSArPSBsaWJfZ2VuZXJpYy9zdHJpbmcubwpAQCAtNTEsOCArNTEsOCBAQAogIyBDcmVhdGUgYSBsaXN0IG9mIHNvdXJjZSBmaWxlcyBzbyB0aGVpciBkZXBlbmRlbmNpZXMgY2FuIGJlIGF1dG8tZ2VuZXJhdGVkCiBTUkNTCSs9ICQoYWRkcHJlZml4ICQoU1JDVFJFRSkvLCQoRVhUX0NPQkpfRklMRVMteToubz0uYykpCiBTUkNTCSs9ICQoYWRkcHJlZml4ICQoU1JDVFJFRSkvLCQoRVhUX1NPQkpfRklMRVMteToubz0uUykpCi1TUkNTCSs9ICQoYWRkcHJlZml4ICQoU1JDVFJFRSkvYXBpX2V4YW1wbGVzLywkKENPQkpfRklMRVMteToubz0uYykpCi1TUkNTCSs9ICQoYWRkcHJlZml4ICQoU1JDVFJFRSkvYXBpX2V4YW1wbGVzLywkKFNPQkpfRklMRVMteToubz0uUykpCitTUkNTCSs9ICQoYWRkcHJlZml4ICQoU1JDVFJFRSkvZXhhbXBsZXMvYXBpLywkKENPQkpfRklMRVMteToubz0uYykpCitTUkNTCSs9ICQoYWRkcHJlZml4ICQoU1JDVFJFRSkvZXhhbXBsZXMvYXBpLywkKFNPQkpfRklMRVMteToubz0uUykpCiAKICMgQ3JlYXRlIGEgbGlzdCBvZiBvYmplY3QgZmlsZXMgdG8gYmUgY29tcGlsZWQKIE9CSlMJKz0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSl9GSUxFUy15KSkKZGlmZiAtLWdpdCBhL2FwaV9leGFtcGxlcy9jcnQwLlMgYi9leGFtcGxlcy9hcGkvY3J0MC5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcGlfZXhhbXBsZXMvY3J0MC5TCnJlbmFtZSB0byBleGFtcGxlcy9hcGkvY3J0MC5TCmRpZmYgLS1naXQgYS9hcGlfZXhhbXBsZXMvZGVtby5jIGIvZXhhbXBsZXMvYXBpL2RlbW8uYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXBpX2V4YW1wbGVzL2RlbW8uYwpyZW5hbWUgdG8gZXhhbXBsZXMvYXBpL2RlbW8uYwpkaWZmIC0tZ2l0IGEvYXBpX2V4YW1wbGVzL2dsdWUuYyBiL2V4YW1wbGVzL2FwaS9nbHVlLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFwaV9leGFtcGxlcy9nbHVlLmMKcmVuYW1lIHRvIGV4YW1wbGVzL2FwaS9nbHVlLmMKZGlmZiAtLWdpdCBhL2FwaV9leGFtcGxlcy9nbHVlLmggYi9leGFtcGxlcy9hcGkvZ2x1ZS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcGlfZXhhbXBsZXMvZ2x1ZS5oCnJlbmFtZSB0byBleGFtcGxlcy9hcGkvZ2x1ZS5oCmRpZmYgLS1naXQgYS9hcGlfZXhhbXBsZXMvbGliZ2Vud3JhcC5jIGIvZXhhbXBsZXMvYXBpL2xpYmdlbndyYXAuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXBpX2V4YW1wbGVzL2xpYmdlbndyYXAuYwpyZW5hbWUgdG8gZXhhbXBsZXMvYXBpL2xpYmdlbndyYXAuYwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL2ltbWFwXzg2eHguaCBiL2luY2x1ZGUvYXNtLXBwYy9pbW1hcF84Nnh4LmgKaW5kZXggYTgzOTgzNC4uZmRmYzY1NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL2ltbWFwXzg2eHguaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvaW1tYXBfODZ4eC5oCkBAIC0xMTQsOSArMTE0LDkgQEAKIAl1aW50CXRpbWluZ19jZmdfMDsJCS8qIDB4MjEwNCAtIEREUiBTRFJBTSBUaW1pbmcgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAwICovCiAJdWludAl0aW1pbmdfY2ZnXzE7CQkvKiAweDIxMDggLSBERFIgU0RSQU0gVGltaW5nIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMSAqLwogCXVpbnQJdGltaW5nX2NmZ18yOwkJLyogMHgyMTBjIC0gRERSIFNEUkFNIFRpbWluZyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDIgKi8KLQl1aW50CXNkcmFtX2NmZ18xOwkJLyogMHgyMTEwIC0gRERSIFNEUkFNIENvbnRyb2wgQ29uZmlndXJhdGlvbiAxICovCisJdWludAlzZHJhbV9jZmc7CQkvKiAweDIxMTAgLSBERFIgU0RSQU0gQ29udHJvbCBDb25maWd1cmF0aW9uIDEgKi8KIAl1aW50ICAgIHNkcmFtX2NmZ18yOyAgICAgICAgICAgIC8qIDB4MjExNCAtIEREUiBTRFJBTSBDb250cm9sIENvbmZpZ3VyYXRpb24gMiAqLwotCXVpbnQJc2RyYW1fbW9kZV8xOwkJLyogMHgyMTE4IC0gRERSIFNEUkFNIE1vZGUgQ29uZmlndXJhdGlvbiAxICovCisJdWludAlzZHJhbV9tb2RlOwkJLyogMHgyMTE4IC0gRERSIFNEUkFNIE1vZGUgQ29uZmlndXJhdGlvbiAxICovCiAJdWludCAgICBzZHJhbV9tb2RlXzI7CQkvKiAweDIxMWMgLSBERFIgU0RSQU0gTW9kZSBDb25maWd1cmF0aW9uIDIgKi8KIAl1aW50ICAgIHNkcmFtX21vZGVfY250bDsgICAgICAgIC8qIDB4MjEyMCAtIEREUiBTRFJBTSBNb2RlIENvbnRyb2wgKi8KIAl1aW50CXNkcmFtX2ludGVydmFsOwkJLyogMHgyMTI0IC0gRERSIFNEUkFNIEludGVydmFsIENvbmZpZ3VyYXRpb24gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29tbW9uLmggYi9pbmNsdWRlL2NvbW1vbi5oCmluZGV4IGE2YzdjMDcuLjZlNjg5YjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29tbW9uLmgKKysrIGIvaW5jbHVkZS9jb21tb24uaApAQCAtNjk3LDYgKzY5Nyw3IEBACiAKICNkZWZpbmUgQVJSQVlfU0laRSh4KSAoc2l6ZW9mKHgpIC8gc2l6ZW9mKCh4KVswXSkpCiAKKyNkZWZpbmUgUk9VTkQoYSxiKQkJKCgoYSkgKyAoYikpICYgfigoYikgLSAxKSkKICNkZWZpbmUgRElWX1JPVU5EKG4sZCkJCSgoKG4pICsgKChkKS8yKSkgLyAoZCkpCiAjZGVmaW5lIERJVl9ST1VORF9VUChuLGQpCSgoKG4pICsgKGQpIC0gMSkgLyAoZCkpCiAjZGVmaW5lIHJvdW5kdXAoeCwgeSkJCSgoKCh4KSArICgoeSkgLSAxKSkgLyAoeSkpICogKHkpKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL01QQzg1MzZEUy5oIGIvaW5jbHVkZS9jb25maWdzL01QQzg1MzZEUy5oCmluZGV4IDcwODVkMjguLjBhYWFiNGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9NUEM4NTM2RFMuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvTVBDODUzNkRTLmgKQEAgLTQ1LDYgKzQ1LDcgQEAKICNkZWZpbmUgQ09ORklHX1NZU19QQ0lfNjRCSVQJMQkvKiBlbmFibGUgNjQtYml0IFBDSSByZXNvdXJjZXMgKi8KIAogI2RlZmluZSBDT05GSUdfRlNMX0xBVwkJMQkvKiBVc2UgY29tbW9uIEZTTCBpbml0IGNvZGUgKi8KKyNkZWZpbmUgQ09ORklHX0UxMDAwCQkxCS8qIERlZmluZCBlMTAwMCBwY2kgRXRoZXJuZXQgY2FyZCovCiAKICNkZWZpbmUgQ09ORklHX1RTRUNfRU5FVAkJLyogdHNlYyBldGhlcm5ldCBzdXBwb3J0ICovCiAjZGVmaW5lIENPTkZJR19FTlZfT1ZFUldSSVRFCkBAIC0yMTgsNiArMjE5LDEzIEBACiAjZGVmaW5lIFBJWElTX1ZDRkdFTjEJCTB4MTMJLyogVkVMQSBDb25maWcgRW5hYmxlIDEgKi8KICNkZWZpbmUgUElYSVNfVkNPUkUwCSAJMHgxNAkvKiBWRUxBIFZDT1JFMCBSZWdpc3RlciAqLwogI2RlZmluZSBQSVhJU19WQk9PVAkJMHgxNgkvKiBWRUxBIFZCT09UIFJlZ2lzdGVyICovCisjZGVmaW5lIFBJWElTX1ZCT09UX0xCTUFQCTB4ZTAJLyogVkJPT1QgLSBDRkdfTEJNQVAgKi8KKyNkZWZpbmUgUElYSVNfVkJPT1RfTEJNQVBfTk9SMAkweDAwCS8qIGNmZ19sYm1hcCAtIGJvb3QgZnJvbSBOT1IgMCAqLworI2RlZmluZSBQSVhJU19WQk9PVF9MQk1BUF9OT1IxCTB4MDEJLyogY2ZnX2xibWFwIC0gYm9vdCBmcm9tIE5PUiAxICovCisjZGVmaW5lIFBJWElTX1ZCT09UX0xCTUFQX05PUjIJMHgwMgkvKiBjZmdfbGJtYXAgLSBib290IGZyb20gTk9SIDIgKi8KKyNkZWZpbmUgUElYSVNfVkJPT1RfTEJNQVBfTk9SMwkweDAzCS8qIGNmZ19sYm1hcCAtIGJvb3QgZnJvbSBOT1IgMyAqLworI2RlZmluZSBQSVhJU19WQk9PVF9MQk1BUF9QSkVUCTB4MDQJLyogY2ZnX2xibWFwIC0gYm9vdCBmcm9tIHByb2pldCAqLworI2RlZmluZSBQSVhJU19WQk9PVF9MQk1BUF9OQU5ECTB4MDUJLyogY2ZnX2xibWFwIC0gYm9vdCBmcm9tIE5BTkQgKi8KICNkZWZpbmUgUElYSVNfVlNQRUVEMAkJMHgxNwkvKiBWRUxBIFZTcGVlZCAwICovCiAjZGVmaW5lIFBJWElTX1ZTUEVFRDEJCTB4MTgJLyogVkVMQSBWU3BlZWQgMSAqLwogI2RlZmluZSBQSVhJU19WU1BFRUQyCQkweDE5CS8qIFZFTEEgVlNwZWVkIDIgKi8KQEAgLTU2MywxMCArNTcxLDEwIEBACiAKIC8qCiAgKiBGb3IgYm9vdGluZyBMaW51eCwgdGhlIGJvYXJkIGluZm8gYW5kIGNvbW1hbmQgbGluZSBkYXRhCi0gKiBoYXZlIHRvIGJlIGluIHRoZSBmaXJzdCA4IE1CIG9mIG1lbW9yeSwgc2luY2UgdGhpcyBpcworICogaGF2ZSB0byBiZSBpbiB0aGUgZmlyc3QgMTYgTUIgb2YgbWVtb3J5LCBzaW5jZSB0aGlzIGlzCiAgKiB0aGUgbWF4aW11bSBtYXBwZWQgYnkgdGhlIExpbnV4IGtlcm5lbCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCiAgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19CT09UTUFQU1oJKDggPDwgMjApCS8qIEluaXRpYWwgTWVtb3J5IG1hcCBmb3IgTGludXgqLworI2RlZmluZSBDT05GSUdfU1lTX0JPT1RNQVBTWgkoMTYgPDwgMjApCS8qIEluaXRpYWwgTWVtb3J5IG1hcCBmb3IgTGludXgqLwogCiAvKgogICogSW50ZXJuYWwgRGVmaW5pdGlvbnMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9NUEM4NTQwQURTLmggYi9pbmNsdWRlL2NvbmZpZ3MvTVBDODU0MEFEUy5oCmluZGV4IDUyNTM2MTEuLjRhZjU5OWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9NUEM4NTQwQURTLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL01QQzg1NDBBRFMuaApAQCAtNDE4LDEwICs0MTgsMTAgQEAKIAogLyoKICAqIEZvciBib290aW5nIExpbnV4LCB0aGUgYm9hcmQgaW5mbyBhbmQgY29tbWFuZCBsaW5lIGRhdGEKLSAqIGhhdmUgdG8gYmUgaW4gdGhlIGZpcnN0IDggTUIgb2YgbWVtb3J5LCBzaW5jZSB0aGlzIGlzCisgKiBoYXZlIHRvIGJlIGluIHRoZSBmaXJzdCAxNiBNQiBvZiBtZW1vcnksIHNpbmNlIHRoaXMgaXMKICAqIHRoZSBtYXhpbXVtIG1hcHBlZCBieSB0aGUgTGludXgga2VybmVsIGR1cmluZyBpbml0aWFsaXphdGlvbi4KICAqLwotI2RlZmluZSBDT05GSUdfU1lTX0JPT1RNQVBTWgkoOCA8PCAyMCkJLyogSW5pdGlhbCBNZW1vcnkgbWFwIGZvciBMaW51eCovCisjZGVmaW5lIENPTkZJR19TWVNfQk9PVE1BUFNaCSgxNiA8PCAyMCkJLyogSW5pdGlhbCBNZW1vcnkgbWFwIGZvciBMaW51eCovCiAKIC8qCiAgKiBJbnRlcm5hbCBEZWZpbml0aW9ucwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL01QQzg1NDFDRFMuaCBiL2luY2x1ZGUvY29uZmlncy9NUEM4NTQxQ0RTLmgKaW5kZXggODEzNTEyYy4uYThmMjA2ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL01QQzg1NDFDRFMuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvTVBDODU0MUNEUy5oCkBAIC00NDAsMTAgKzQ0MCwxMCBAQAogCiAvKgogICogRm9yIGJvb3RpbmcgTGludXgsIHRoZSBib2FyZCBpbmZvIGFuZCBjb21tYW5kIGxpbmUgZGF0YQotICogaGF2ZSB0byBiZSBpbiB0aGUgZmlyc3QgOCBNQiBvZiBtZW1vcnksIHNpbmNlIHRoaXMgaXMKKyAqIGhhdmUgdG8gYmUgaW4gdGhlIGZpcnN0IDE2IE1CIG9mIG1lbW9yeSwgc2luY2UgdGhpcyBpcwogICogdGhlIG1heGltdW0gbWFwcGVkIGJ5IHRoZSBMaW51eCBrZXJuZWwgZHVyaW5nIGluaXRpYWxpemF0aW9uLgogICovCi0jZGVmaW5lIENPTkZJR19TWVNfQk9PVE1BUFNaCSg4IDw8IDIwKQkvKiBJbml0aWFsIE1lbW9yeSBtYXAgZm9yIExpbnV4Ki8KKyNkZWZpbmUgQ09ORklHX1NZU19CT09UTUFQU1oJKDE2IDw8IDIwKQkvKiBJbml0aWFsIE1lbW9yeSBtYXAgZm9yIExpbnV4Ki8KIAogLyoKICAqIEludGVybmFsIERlZmluaXRpb25zCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvTVBDODU0NERTLmggYi9pbmNsdWRlL2NvbmZpZ3MvTVBDODU0NERTLmgKaW5kZXggMWQ4ZmVjZi4uMmRlMzEzOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL01QQzg1NDREUy5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9NUEM4NTQ0RFMuaApAQCAtNDQsNiArNDQsNyBAQAogI2RlZmluZSBDT05GSUdfU1lTX1BDSV82NEJJVAkxCS8qIGVuYWJsZSA2NC1iaXQgUENJIHJlc291cmNlcyAqLwogCiAjZGVmaW5lIENPTkZJR19GU0xfTEFXCQkxCS8qIFVzZSBjb21tb24gRlNMIGluaXQgY29kZSAqLworI2RlZmluZSBDT05GSUdfRTEwMDAJCTEJLyogRGVmaW5kIGUxMDAwIHBjaSBFdGhlcm5ldCBjYXJkKi8KIAogI2RlZmluZSBDT05GSUdfVFNFQ19FTkVUCQkvKiB0c2VjIGV0aGVybmV0IHN1cHBvcnQgKi8KICNkZWZpbmUgQ09ORklHX0VOVl9PVkVSV1JJVEUKQEAgLTE5Miw2ICsxOTMsOCBAQAogI2RlZmluZSBQSVhJU19WQ0ZHRU4wCQkweDEyCS8qIFZFTEEgQ29uZmlnIEVuYWJsZSAwICovCiAjZGVmaW5lIFBJWElTX1ZDRkdFTjEJCTB4MTMJLyogVkVMQSBDb25maWcgRW5hYmxlIDEgKi8KICNkZWZpbmUgUElYSVNfVkJPT1QJCTB4MTYJLyogVkVMQSBWQk9PVCBSZWdpc3RlciAqLworI2RlZmluZSBQSVhJU19WQk9PVF9GTUFQCTB4ODAJLyogVkJPT1QgLSBDRkdfRkxBU0hNQVAgKi8KKyNkZWZpbmUgUElYSVNfVkJPT1RfRkJBTksJMHg0MAkvKiBWQk9PVCAtIENGR19GTEFTSEJBTksgKi8KICNkZWZpbmUgUElYSVNfVlNQRUVEMAkJMHgxNwkvKiBWRUxBIFZTcGVlZCAwICovCiAjZGVmaW5lIFBJWElTX1ZTUEVFRDEJCTB4MTgJLyogVkVMQSBWU3BlZWQgMSAqLwogI2RlZmluZSBQSVhJU19WQ0xLSAkJMHgxOQkvKiBWRUxBIFZDTEtIIHJlZ2lzdGVyICovCkBAIC00NTgsMTAgKzQ2MSwxMCBAQAogCiAvKgogICogRm9yIGJvb3RpbmcgTGludXgsIHRoZSBib2FyZCBpbmZvIGFuZCBjb21tYW5kIGxpbmUgZGF0YQotICogaGF2ZSB0byBiZSBpbiB0aGUgZmlyc3QgOCBNQiBvZiBtZW1vcnksIHNpbmNlIHRoaXMgaXMKKyAqIGhhdmUgdG8gYmUgaW4gdGhlIGZpcnN0IDE2IE1CIG9mIG1lbW9yeSwgc2luY2UgdGhpcyBpcwogICogdGhlIG1heGltdW0gbWFwcGVkIGJ5IHRoZSBMaW51eCBrZXJuZWwgZHVyaW5nIGluaXRpYWxpemF0aW9uLgogICovCi0jZGVmaW5lIENPTkZJR19TWVNfQk9PVE1BUFNaCSg4IDw8IDIwKQkvKiBJbml0aWFsIE1lbW9yeSBtYXAgZm9yIExpbnV4Ki8KKyNkZWZpbmUgQ09ORklHX1NZU19CT09UTUFQU1oJKDE2IDw8IDIwKQkvKiBJbml0aWFsIE1lbW9yeSBtYXAgZm9yIExpbnV4Ki8KIAogLyoKICAqIEludGVybmFsIERlZmluaXRpb25zCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvTVBDODU0OENEUy5oIGIvaW5jbHVkZS9jb25maWdzL01QQzg1NDhDRFMuaAppbmRleCA3MDg5YWM3Li5iZWJiOWU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvTVBDODU0OENEUy5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9NUEM4NTQ4Q0RTLmgKQEAgLTUwMCwxMCArNTAwLDEwIEBACiAKIC8qCiAgKiBGb3IgYm9vdGluZyBMaW51eCwgdGhlIGJvYXJkIGluZm8gYW5kIGNvbW1hbmQgbGluZSBkYXRhCi0gKiBoYXZlIHRvIGJlIGluIHRoZSBmaXJzdCA4IE1CIG9mIG1lbW9yeSwgc2luY2UgdGhpcyBpcworICogaGF2ZSB0byBiZSBpbiB0aGUgZmlyc3QgMTYgTUIgb2YgbWVtb3J5LCBzaW5jZSB0aGlzIGlzCiAgKiB0aGUgbWF4aW11bSBtYXBwZWQgYnkgdGhlIExpbnV4IGtlcm5lbCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCiAgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19CT09UTUFQU1oJKDggPDwgMjApCS8qIEluaXRpYWwgTWVtb3J5IG1hcCBmb3IgTGludXgqLworI2RlZmluZSBDT05GSUdfU1lTX0JPT1RNQVBTWgkoMTYgPDwgMjApCS8qIEluaXRpYWwgTWVtb3J5IG1hcCBmb3IgTGludXgqLwogCiAvKgogICogSW50ZXJuYWwgRGVmaW5pdGlvbnMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9NUEM4NTU1Q0RTLmggYi9pbmNsdWRlL2NvbmZpZ3MvTVBDODU1NUNEUy5oCmluZGV4IGVmOTUxMTguLjk0OTUyZGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9NUEM4NTU1Q0RTLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL01QQzg1NTVDRFMuaApAQCAtNDM4LDEwICs0MzgsMTAgQEAKIAogLyoKICAqIEZvciBib290aW5nIExpbnV4LCB0aGUgYm9hcmQgaW5mbyBhbmQgY29tbWFuZCBsaW5lIGRhdGEKLSAqIGhhdmUgdG8gYmUgaW4gdGhlIGZpcnN0IDggTUIgb2YgbWVtb3J5LCBzaW5jZSB0aGlzIGlzCisgKiBoYXZlIHRvIGJlIGluIHRoZSBmaXJzdCAxNiBNQiBvZiBtZW1vcnksIHNpbmNlIHRoaXMgaXMKICAqIHRoZSBtYXhpbXVtIG1hcHBlZCBieSB0aGUgTGludXgga2VybmVsIGR1cmluZyBpbml0aWFsaXphdGlvbi4KICAqLwotI2RlZmluZSBDT05GSUdfU1lTX0JPT1RNQVBTWgkoOCA8PCAyMCkJLyogSW5pdGlhbCBNZW1vcnkgbWFwIGZvciBMaW51eCovCisjZGVmaW5lIENPTkZJR19TWVNfQk9PVE1BUFNaCSgxNiA8PCAyMCkJLyogSW5pdGlhbCBNZW1vcnkgbWFwIGZvciBMaW51eCovCiAKIC8qCiAgKiBJbnRlcm5hbCBEZWZpbml0aW9ucwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL01QQzg1NjBBRFMuaCBiL2luY2x1ZGUvY29uZmlncy9NUEM4NTYwQURTLmgKaW5kZXggNzYxYTM3MC4uYzFhMWE2ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL01QQzg1NjBBRFMuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvTVBDODU2MEFEUy5oCkBAIC00NTIsMTAgKzQ1MiwxMCBAQAogCiAvKgogICogRm9yIGJvb3RpbmcgTGludXgsIHRoZSBib2FyZCBpbmZvIGFuZCBjb21tYW5kIGxpbmUgZGF0YQotICogaGF2ZSB0byBiZSBpbiB0aGUgZmlyc3QgOCBNQiBvZiBtZW1vcnksIHNpbmNlIHRoaXMgaXMKKyAqIGhhdmUgdG8gYmUgaW4gdGhlIGZpcnN0IDE2IE1CIG9mIG1lbW9yeSwgc2luY2UgdGhpcyBpcwogICogdGhlIG1heGltdW0gbWFwcGVkIGJ5IHRoZSBMaW51eCBrZXJuZWwgZHVyaW5nIGluaXRpYWxpemF0aW9uLgogICovCi0jZGVmaW5lIENPTkZJR19TWVNfQk9PVE1BUFNaCSg4IDw8IDIwKQkvKiBJbml0aWFsIE1lbW9yeSBtYXAgZm9yIExpbnV4Ki8KKyNkZWZpbmUgQ09ORklHX1NZU19CT09UTUFQU1oJKDE2IDw8IDIwKQkvKiBJbml0aWFsIE1lbW9yeSBtYXAgZm9yIExpbnV4Ki8KIAogLyoKICAqIEludGVybmFsIERlZmluaXRpb25zCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvTVBDODU2OE1EUy5oIGIvaW5jbHVkZS9jb25maWdzL01QQzg1NjhNRFMuaAppbmRleCBhYzM0MDQ3Li43YjhjNmM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvTVBDODU2OE1EUy5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9NUEM4NTY4TURTLmgKQEAgLTQ1NiwxMCArNDU2LDEwIEBACiAKIC8qCiAgKiBGb3IgYm9vdGluZyBMaW51eCwgdGhlIGJvYXJkIGluZm8gYW5kIGNvbW1hbmQgbGluZSBkYXRhCi0gKiBoYXZlIHRvIGJlIGluIHRoZSBmaXJzdCA4IE1CIG9mIG1lbW9yeSwgc2luY2UgdGhpcyBpcworICogaGF2ZSB0byBiZSBpbiB0aGUgZmlyc3QgMTYgTUIgb2YgbWVtb3J5LCBzaW5jZSB0aGlzIGlzCiAgKiB0aGUgbWF4aW11bSBtYXBwZWQgYnkgdGhlIExpbnV4IGtlcm5lbCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCiAgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19CT09UTUFQU1oJKDggPDwgMjApCS8qIEluaXRpYWwgTWVtb3J5IG1hcCBmb3IgTGludXgqLworI2RlZmluZSBDT05GSUdfU1lTX0JPT1RNQVBTWgkoMTYgPDwgMjApCS8qIEluaXRpYWwgTWVtb3J5IG1hcCBmb3IgTGludXgqLwogCiAvKgogICogSW50ZXJuYWwgRGVmaW5pdGlvbnMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9NUEM4NTY5TURTLmggYi9pbmNsdWRlL2NvbmZpZ3MvTVBDODU2OU1EUy5oCmluZGV4IDI3MDQ0ZjcuLjZlOGYxZmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9NUEM4NTY5TURTLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL01QQzg1NjlNRFMuaApAQCAtNDcxLDEwICs0NzEsMTAgQEAKIAogLyoKICAqIEZvciBib290aW5nIExpbnV4LCB0aGUgYm9hcmQgaW5mbyBhbmQgY29tbWFuZCBsaW5lIGRhdGEKLSAqIGhhdmUgdG8gYmUgaW4gdGhlIGZpcnN0IDggTUIgb2YgbWVtb3J5LCBzaW5jZSB0aGlzIGlzCisgKiBoYXZlIHRvIGJlIGluIHRoZSBmaXJzdCAxNiBNQiBvZiBtZW1vcnksIHNpbmNlIHRoaXMgaXMKICAqIHRoZSBtYXhpbXVtIG1hcHBlZCBieSB0aGUgTGludXgga2VybmVsIGR1cmluZyBpbml0aWFsaXphdGlvbi4KICAqLwotI2RlZmluZSBDT05GSUdfU1lTX0JPT1RNQVBTWgkoOCA8PCAyMCkKKyNkZWZpbmUgQ09ORklHX1NZU19CT09UTUFQU1oJKDE2IDw8IDIwKQogCQkJCQkvKiBJbml0aWFsIE1lbW9yeSBtYXAgZm9yIExpbnV4Ki8KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9NUEM4NTcyRFMuaCBiL2luY2x1ZGUvY29uZmlncy9NUEM4NTcyRFMuaAppbmRleCAyMzViZTUxLi42NGY1YzRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvTVBDODU3MkRTLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL01QQzg1NzJEUy5oCkBAIC0yMzcsNiArMjM3LDExIEBACiAjZGVmaW5lIFBJWElTX1ZDRkdFTjEJCTB4MTMJLyogVkVMQSBDb25maWcgRW5hYmxlIDEgKi8KICNkZWZpbmUgUElYSVNfVkNPUkUwCSAJMHgxNAkvKiBWRUxBIFZDT1JFMCBSZWdpc3RlciAqLwogI2RlZmluZSBQSVhJU19WQk9PVAkJMHgxNgkvKiBWRUxBIFZCT09UIFJlZ2lzdGVyICovCisjZGVmaW5lIFBJWElTX1ZCT09UX0xCTUFQCTB4YzAJLyogVkJPT1QgLSBDRkdfTEJNQVAgKi8KKyNkZWZpbmUgUElYSVNfVkJPT1RfTEJNQVBfTk9SMAkweDAwCS8qIGNmZ19sYm1hcCAtIGJvb3QgZnJvbSBOT1IgMCAqLworI2RlZmluZSBQSVhJU19WQk9PVF9MQk1BUF9QSkVUCTB4MDEJLyogY2ZnX2xibWFwIC0gYm9vdCBmcm9tIHByb2pldCAqLworI2RlZmluZSBQSVhJU19WQk9PVF9MQk1BUF9OQU5ECTB4MDIJLyogY2ZnX2xibWFwIC0gYm9vdCBmcm9tIE5BTkQgKi8KKyNkZWZpbmUgUElYSVNfVkJPT1RfTEJNQVBfTk9SMQkweDAzCS8qIGNmZ19sYm1hcCAtIGJvb3QgZnJvbSBOT1IgMSAqLwogI2RlZmluZSBQSVhJU19WU1BFRUQwCQkweDE3CS8qIFZFTEEgVlNwZWVkIDAgKi8KICNkZWZpbmUgUElYSVNfVlNQRUVEMQkJMHgxOAkvKiBWRUxBIFZTcGVlZCAxICovCiAjZGVmaW5lIFBJWElTX1ZTUEVFRDIJCTB4MTkJLyogVkVMQSBWU3BlZWQgMiAqLwpAQCAtNjA3LDEwICs2MTIsMTAgQEAKIAogLyoKICAqIEZvciBib290aW5nIExpbnV4LCB0aGUgYm9hcmQgaW5mbyBhbmQgY29tbWFuZCBsaW5lIGRhdGEKLSAqIGhhdmUgdG8gYmUgaW4gdGhlIGZpcnN0IDggTUIgb2YgbWVtb3J5LCBzaW5jZSB0aGlzIGlzCisgKiBoYXZlIHRvIGJlIGluIHRoZSBmaXJzdCAxNiBNQiBvZiBtZW1vcnksIHNpbmNlIHRoaXMgaXMKICAqIHRoZSBtYXhpbXVtIG1hcHBlZCBieSB0aGUgTGludXgga2VybmVsIGR1cmluZyBpbml0aWFsaXphdGlvbi4KICAqLwotI2RlZmluZSBDT05GSUdfU1lTX0JPT1RNQVBTWgkoOCA8PCAyMCkJLyogSW5pdGlhbCBNZW1vcnkgbWFwIGZvciBMaW51eCovCisjZGVmaW5lIENPTkZJR19TWVNfQk9PVE1BUFNaCSgxNiA8PCAyMCkJLyogSW5pdGlhbCBNZW1vcnkgbWFwIGZvciBMaW51eCovCiAKIC8qCiAgKiBJbnRlcm5hbCBEZWZpbml0aW9ucwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL01QQzg2NDFIUENOLmggYi9pbmNsdWRlL2NvbmZpZ3MvTVBDODY0MUhQQ04uaAppbmRleCA5NTVhYzNkLi5iZjJlMzU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvTVBDODY0MUhQQ04uaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvTVBDODY0MUhQQ04uaApAQCAtMjI0LDYgKzIyNCw4IEBACiAjZGVmaW5lIFBJWElTX1ZDRkdFTjAJCTB4MTIJLyogVkVMQSBDb25maWcgRW5hYmxlIDAgKi8KICNkZWZpbmUgUElYSVNfVkNGR0VOMQkJMHgxMwkvKiBWRUxBIENvbmZpZyBFbmFibGUgMSAqLwogI2RlZmluZSBQSVhJU19WQk9PVAkJMHgxNgkvKiBWRUxBIFZCT09UIFJlZ2lzdGVyICovCisjZGVmaW5lIFBJWElTX1ZCT09UX0ZNQVAJMHg4MAkvKiBWQk9PVCAtIENGR19GTEFTSE1BUCAqLworI2RlZmluZSBQSVhJU19WQk9PVF9GQkFOSwkweDQwCS8qIFZCT09UIC0gQ0ZHX0ZMQVNIQkFOSyAqLwogI2RlZmluZSBQSVhJU19WU1BFRUQwCQkweDE3CS8qIFZFTEEgVlNwZWVkIDAgKi8KICNkZWZpbmUgUElYSVNfVlNQRUVEMQkJMHgxOAkvKiBWRUxBIFZTcGVlZCAxICovCiAjZGVmaW5lIFBJWElTX1ZDTEtICQkweDE5CS8qIFZFTEEgVkNMS0ggcmVnaXN0ZXIgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9QMjAyMERTLmggYi9pbmNsdWRlL2NvbmZpZ3MvUDIwMjBEUy5oCmluZGV4IDcwYWI5NmYuLjVjMmM1Y2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9QMjAyMERTLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL1AyMDIwRFMuaApAQCAtMjgyLDYgKzI4MiwxMSBAQAogI2RlZmluZSBQSVhJU19WV0FUQ0gJCTB4MjQJLyogV2F0Y2hkb2cgUmVnaXN0ZXIgKi8KICNkZWZpbmUgUElYSVNfTEVECQkweDI1CS8qIExFRCBSZWdpc3RlciAqLwogCisjZGVmaW5lIFBJWElTX1NXKHgpCQkweDIwICsgKHggLSAxKSAqIDIKKyNkZWZpbmUgUElYSVNfRU4oeCkJCTB4MjEgKyAoeCAtIDEpICogMgorI2RlZmluZSBQSVhJU19TVzdfTEJNQVAJCTB4YzAJLyogU1c3IC0gY2ZnX2xibWFwICovCisjZGVmaW5lIFBJWElTX1NXN19WQkFOSwkJMHgzMAkvKiBTVzcgLSBjZmdfdmJhbmsgKi8KKwogLyogb2xkIHBpeGlzIHJlZmVyZW5jZWQgbmFtZXMgKi8KICNkZWZpbmUgUElYSVNfVkNMS0gJCTB4MTkJLyogVkVMQSBWQ0xLSCByZWdpc3RlciAqLwogI2RlZmluZSBQSVhJU19WQ0xLTAkJMHgxQQkvKiBWRUxBIFZDTEtMIHJlZ2lzdGVyICovCkBAIC02MzYsMTAgKzY0MSwxMCBAQAogCiAvKgogICogRm9yIGJvb3RpbmcgTGludXgsIHRoZSBib2FyZCBpbmZvIGFuZCBjb21tYW5kIGxpbmUgZGF0YQotICogaGF2ZSB0byBiZSBpbiB0aGUgZmlyc3QgOCBNQiBvZiBtZW1vcnksIHNpbmNlIHRoaXMgaXMKKyAqIGhhdmUgdG8gYmUgaW4gdGhlIGZpcnN0IDE2IE1CIG9mIG1lbW9yeSwgc2luY2UgdGhpcyBpcwogICogdGhlIG1heGltdW0gbWFwcGVkIGJ5IHRoZSBMaW51eCBrZXJuZWwgZHVyaW5nIGluaXRpYWxpemF0aW9uLgogICovCi0jZGVmaW5lIENPTkZJR19TWVNfQk9PVE1BUFNaCSg4IDw8IDIwKQkvKiBJbml0aWFsIE1lbW9yeSBtYXAgZm9yIExpbnV4Ki8KKyNkZWZpbmUgQ09ORklHX1NZU19CT09UTUFQU1oJKDE2IDw8IDIwKQkvKiBJbml0aWFsIE1lbW9yeSBtYXAgZm9yIExpbnV4Ki8KIAogLyoKICAqIEludGVybmFsIERlZmluaXRpb25zCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvWFBFRElURTUxNzAuaCBiL2luY2x1ZGUvY29uZmlncy9YUEVESVRFNTE3MC5oCmluZGV4IDk4NWI1ODkuLjhiZTlmYTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9YUEVESVRFNTE3MC5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9YUEVESVRFNTE3MC5oCkBAIC01NzksNiArNTc5LDcgQEAKICAqIHRoZSBtYXhpbXVtIG1hcHBlZCBieSB0aGUgTGludXgga2VybmVsIGR1cmluZyBpbml0aWFsaXphdGlvbi4KICAqLwogI2RlZmluZSBDT05GSUdfU1lTX0JPT1RNQVBTWgkoMTYgPDwgMjApCS8qIEluaXRpYWwgTWVtb3J5IG1hcCBmb3IgTGludXgqLworI2RlZmluZSBDT05GSUdfU1lTX0JPT1RNX0xFTgkoMTYgPDwgMjApCS8qIEluY3JlYXNlIG1heCBndW56aXAgc2l6ZSAqLwogCiAvKgogICogQm9vdCBGbGFncwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL1hQRURJVEU1MjAwLmggYi9pbmNsdWRlL2NvbmZpZ3MvWFBFRElURTUyMDAuaAppbmRleCA4OWFiNjkyLi5kZWRhMjA4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvWFBFRElURTUyMDAuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvWFBFRElURTUyMDAuaApAQCAtMTI5LDYgKzEyOSw3IEBACiAjZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfV1JJVEVfVE9VVAk1MDAJCS8qIEZsYXNoIFdyaXRlIFRpbWVvdXQgKG1zKSAqLwogI2RlZmluZSBDT05GSUdfRkxBU0hfQ0ZJX0RSSVZFUgogI2RlZmluZSBDT05GSUdfU1lTX0ZMQVNIX0NGSQorI2RlZmluZSBDT05GSUdfU1lTX0ZMQVNIX1VTRV9CVUZGRVJfV1JJVEUKICNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9BVVRPUFJPVEVDVF9MSVNUCXsgezB4ZmZmNDAwMDAsIDB4YzAwMDB9LCBcCiAJCQkJCQkgIHsweGZiZjQwMDAwLCAweGMwMDAwfSB9CiAjZGVmaW5lIENPTkZJR19TWVNfTU9OSVRPUl9CQVNFCVRFWFRfQkFTRQkvKiBzdGFydCBvZiBtb25pdG9yICovCkBAIC0zNjksNiArMzcwLDcgQEAKICAqIHRoZSBtYXhpbXVtIG1hcHBlZCBieSB0aGUgTGludXgga2VybmVsIGR1cmluZyBpbml0aWFsaXphdGlvbi4KICAqLwogI2RlZmluZSBDT05GSUdfU1lTX0JPT1RNQVBTWgkoMTYgPDwgMjApCS8qIEluaXRpYWwgTWVtb3J5IG1hcCBmb3IgTGludXgqLworI2RlZmluZSBDT05GSUdfU1lTX0JPT1RNX0xFTgkoMTYgPDwgMjApCS8qIEluY3JlYXNlIG1heCBndW56aXAgc2l6ZSAqLwogCiAvKgogICogQm9vdCBGbGFncwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL1hQRURJVEU1MzcwLmggYi9pbmNsdWRlL2NvbmZpZ3MvWFBFRElURTUzNzAuaAppbmRleCA1MzZlMDYzLi5hY2I2MmFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvWFBFRElURTUzNzAuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvWFBFRElURTUzNzAuaApAQCAtMTI0LDYgKzEyNCwxMiBAQAogICovCiAjZGVmaW5lIENPTkZJR19TWVNfTkFORF9CQVNFCQkweGVmODAwMDAwCiAjZGVmaW5lIENPTkZJR19TWVNfTkFORF9CQVNFMgkJMHhlZjg0MDAwMCAvKiBVbnVzZWQgYXQgdGhpcyB0aW1lICovCisjZGVmaW5lIENPTkZJR19TWVNfTkFORF9CQVNFX0xJU1QJe0NPTkZJR19TWVNfTkFORF9CQVNFLCBcCisJCQkJCSBDT05GSUdfU1lTX05BTkRfQkFTRTJ9CisjZGVmaW5lIENPTkZJR19TWVNfTUFYX05BTkRfREVWSUNFCTIKKyNkZWZpbmUgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURQorI2RlZmluZSBDT05GSUdfU1lTX05BTkRfUVVJRVRfVEVTVAkvKiAybmQgTkFORCBmbGFzaCBub3QgYWx3YXlzIHBvcHVsYXRlZCAqLworI2RlZmluZSBDT05GSUdfTkFORF9GU0xfRUxCQwogCiAvKgogICogTk9SIGZsYXNoIGNvbmZpZ3VyYXRpb24KQEAgLTEzNyw2ICsxNDMsNyBAQAogI2RlZmluZSBDT05GSUdfU1lTX0ZMQVNIX1dSSVRFX1RPVVQJNTAwCQkvKiBGbGFzaCBXcml0ZSBUaW1lb3V0IChtcykgKi8KICNkZWZpbmUgQ09ORklHX0ZMQVNIX0NGSV9EUklWRVIKICNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9DRkkKKyNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9VU0VfQlVGRkVSX1dSSVRFCiAjZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfQVVUT1BST1RFQ1RfTElTVAl7IHsweGZmZjQwMDAwLCAweGMwMDAwfSwgXAogCQkJCQkJICB7MHhmN2Y0MDAwMCwgMHhjMDAwMH0gfQogI2RlZmluZSBDT05GSUdfU1lTX01PTklUT1JfQkFTRQlURVhUX0JBU0UJLyogc3RhcnQgb2YgbW9uaXRvciAqLwpAQCAtMzc0LDE2ICszODEsMTcgQEAKICNkZWZpbmUgQ09ORklHX0NNRF9EVFQKICNkZWZpbmUgQ09ORklHX0NNRF9FRVBST00KICNkZWZpbmUgQ09ORklHX0NNRF9FTEYKLSNkZWZpbmUgQ09ORklHX0NNRF9TQVZFRU5WCiAjZGVmaW5lIENPTkZJR19DTURfRkxBU0gKICNkZWZpbmUgQ09ORklHX0NNRF9JMkMKICNkZWZpbmUgQ09ORklHX0NNRF9KRkZTMgogI2RlZmluZSBDT05GSUdfQ01EX01JSQorI2RlZmluZSBDT05GSUdfQ01EX05BTkQKICNkZWZpbmUgQ09ORklHX0NNRF9ORVQKICNkZWZpbmUgQ09ORklHX0NNRF9QQ0E5NTNYCiAjZGVmaW5lIENPTkZJR19DTURfUENBOTUzWF9JTkZPCiAjZGVmaW5lIENPTkZJR19DTURfUENJCiAjZGVmaW5lIENPTkZJR19DTURfUElORworI2RlZmluZSBDT05GSUdfQ01EX1NBVkVFTlYKICNkZWZpbmUgQ09ORklHX0NNRF9TTlRQCiAKIC8qCkBAIC00MTIsNiArNDIwLDcgQEAKICAqIHRoZSBtYXhpbXVtIG1hcHBlZCBieSB0aGUgTGludXgga2VybmVsIGR1cmluZyBpbml0aWFsaXphdGlvbi4KICAqLwogI2RlZmluZSBDT05GSUdfU1lTX0JPT1RNQVBTWgkoMTYgPDwgMjApCS8qIEluaXRpYWwgTWVtb3J5IG1hcCBmb3IgTGludXgqLworI2RlZmluZSBDT05GSUdfU1lTX0JPT1RNX0xFTgkoMTYgPDwgMjApCS8qIEluY3JlYXNlIG1heCBndW56aXAgc2l6ZSAqLwogCiAvKgogICogQm9vdCBGbGFncwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL2FmZWI5MjYwLmggYi9pbmNsdWRlL2NvbmZpZ3MvYWZlYjkyNjAuaAppbmRleCA4YTFjNGY1Li43NDY3N2Q4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvYWZlYjkyNjAuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvYWZlYjkyNjAuaApAQCAtMTYxLDcgKzE2MSw2IEBACiAjZGVmaW5lIENPTkZJR19TWVNfTE9OR0hFTFAJCTEKICNkZWZpbmUgQ09ORklHX0NNRExJTkVfRURJVElORwkxCiAKLSNkZWZpbmUgUk9VTkQoQSwgQikJCSgoKEEpICsgKEIpKSAmIH4oKEIpIC0gMSkpCiAvKgogICogU2l6ZSBvZiBtYWxsb2MoKSBwb29sCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9hdDkxY2FwOWFkay5oIGIvaW5jbHVkZS9jb25maWdzL2F0OTFjYXA5YWRrLmgKaW5kZXggZGY3MzY2MS4uMGVmMzU1NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL2F0OTFjYXA5YWRrLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL2F0OTFjYXA5YWRrLmgKQEAgLTIwMyw3ICsyMDMsNiBAQAogI2RlZmluZSBDT05GSUdfU1lTX0xPTkdIRUxQCQkxCiAjZGVmaW5lIENPTkZJR19DTURMSU5FX0VESVRJTkcJMQogCi0jZGVmaW5lIFJPVU5EKEEsIEIpCQkoKChBKSArIChCKSkgJiB+KChCKSAtIDEpKQogLyoKICAqIFNpemUgb2YgbWFsbG9jKCkgcG9vbAogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvYXQ5MXJtOTIwMGVrLmggYi9pbmNsdWRlL2NvbmZpZ3MvYXQ5MXJtOTIwMGVrLmgKaW5kZXggYzg5OGM3My4uNThlYzk0YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL2F0OTFybTkyMDBlay5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9hdDkxcm05MjAwZWsuaApAQCAtMzExLDcgKzMxMSw2IEBACiAgKi8KICNkZWZpbmUgQ09ORklHX1NZU19IWl9DTE9DSyAoQVQ5MUNfTUFTVEVSX0NMT0NLIC8gMikKIAotI2RlZmluZSBST1VORChBLCBCKQkJKCgoQSkgKyAoQikpICYgfigoQikgLSAxKSkKIC8qCiAgKiBTaXplIG9mIG1hbGxvYygpIHBvb2wKICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL2F0OTFzYW05MjYwZWsuaCBiL2luY2x1ZGUvY29uZmlncy9hdDkxc2FtOTI2MGVrLmgKaW5kZXggN2VlZjlhMy4uNmNlZTU5MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL2F0OTFzYW05MjYwZWsuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvYXQ5MXNhbTkyNjBlay5oCkBAIC0yMDcsNyArMjA3LDYgQEAKICNkZWZpbmUgQ09ORklHX1NZU19MT05HSEVMUAkJMQogI2RlZmluZSBDT05GSUdfQ01ETElORV9FRElUSU5HCTEKIAotI2RlZmluZSBST1VORChBLCBCKQkJKCgoQSkgKyAoQikpICYgfigoQikgLSAxKSkKIC8qCiAgKiBTaXplIG9mIG1hbGxvYygpIHBvb2wKICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL2F0OTFzYW05MjYxZWsuaCBiL2luY2x1ZGUvY29uZmlncy9hdDkxc2FtOTI2MWVrLmgKaW5kZXggMDI4YTA0Zi4uM2QxMDhhYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL2F0OTFzYW05MjYxZWsuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvYXQ5MXNhbTkyNjFlay5oCkBAIC0yMjUsNyArMjI1LDYgQEAKICNkZWZpbmUgQ09ORklHX1NZU19MT05HSEVMUAkJMQogI2RlZmluZSBDT05GSUdfQ01ETElORV9FRElUSU5HCTEKIAotI2RlZmluZSBST1VORChBLCBCKQkJKCgoQSkgKyAoQikpICYgfigoQikgLSAxKSkKIC8qCiAgKiBTaXplIG9mIG1hbGxvYygpIHBvb2wKICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL2F0OTFzYW05MjYzZWsuaCBiL2luY2x1ZGUvY29uZmlncy9hdDkxc2FtOTI2M2VrLmgKaW5kZXggOTUzOWQxOC4uMzJmM2Y2MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL2F0OTFzYW05MjYzZWsuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvYXQ5MXNhbTkyNjNlay5oCkBAIC0zMzUsNyArMzM1LDYgQEAKICNkZWZpbmUgQ09ORklHX1NZU19IVVNIX1BBUlNFUgogI2RlZmluZSBDT05GSUdfU1lTX1BST01QVF9IVVNIX1BTMgkiPiAiCiAKLSNkZWZpbmUgUk9VTkQoQSwgQikJCSgoKEEpICsgKEIpKSAmIH4oKEIpIC0gMSkpCiAvKgogICogU2l6ZSBvZiBtYWxsb2MoKSBwb29sCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9hdDkxc2FtOW0xMGc0NWVrLmggYi9pbmNsdWRlL2NvbmZpZ3MvYXQ5MXNhbTltMTBnNDVlay5oCmluZGV4IGFmOTdhZmUuLjRiNDZjMzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9hdDkxc2FtOW0xMGc0NWVrLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL2F0OTFzYW05bTEwZzQ1ZWsuaApAQCAtMjEyLDcgKzIxMiw2IEBACiAjZGVmaW5lIENPTkZJR19TWVNfSFVTSF9QQVJTRVIKICNkZWZpbmUgQ09ORklHX1NZU19QUk9NUFRfSFVTSF9QUzIJIj4gIgogCi0jZGVmaW5lIFJPVU5EKEEsIEIpCQkoKChBKSArIChCKSkgJiB+KChCKSAtIDEpKQogLyoKICAqIFNpemUgb2YgbWFsbG9jKCkgcG9vbAogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvYXQ5MXNhbTlybGVrLmggYi9pbmNsdWRlL2NvbmZpZ3MvYXQ5MXNhbTlybGVrLmgKaW5kZXggYmMyYTMyYi4uOTE2NzMwNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL2F0OTFzYW05cmxlay5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9hdDkxc2FtOXJsZWsuaApAQCAtMTcwLDcgKzE3MCw2IEBACiAjZGVmaW5lIENPTkZJR19TWVNfTE9OR0hFTFAJCTEKICNkZWZpbmUgQ09ORklHX0NNRExJTkVfRURJVElORwkxCiAKLSNkZWZpbmUgUk9VTkQoQSwgQikJCSgoKEEpICsgKEIpKSAmIH4oKEIpIC0gMSkpCiAvKgogICogU2l6ZSBvZiBtYWxsb2MoKSBwb29sCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9rbWV0ZXIxLmggYi9pbmNsdWRlL2NvbmZpZ3Mva21ldGVyMS5oCmluZGV4IDYzZWNkYWUuLjg2OWZkNGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9rbWV0ZXIxLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL2ttZXRlcjEuaApAQCAtMTU3LDcgKzE1Nyw2IEBACiAjZW5kaWYKIAogI2RlZmluZSBDT05GSUdfU1lTX01PTklUT1JfTEVOCQkoMzg0ICogMTAyNCkgLyogUmVzZXJ2ZSAzODQga0IgZm9yIE1vbiAqLwotI2RlZmluZSBDT05GSUdfU1lTX01BTExPQ19MRU4JCSgxMjggKiAxMDI0KSAvKiBSZXNlcnZlZCBmb3IgbWFsbG9jICovCiAKIC8qCiAgKiBJbml0aWFsIFJBTSBCYXNlIEFkZHJlc3MgU2V0dXAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9wbTkyNjEuaCBiL2luY2x1ZGUvY29uZmlncy9wbTkyNjEuaAppbmRleCAzMTVkN2Y4Li4yMDNhMTRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvcG05MjYxLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL3BtOTI2MS5oCkBAIC0zNjgsNyArMzY4LDYgQEAKICNkZWZpbmUgQ09ORklHX1NZU19MT05HSEVMUAkJMQogI2RlZmluZSBDT05GSUdfQ01ETElORV9FRElUSU5HCTEKIAotI2RlZmluZSBST1VORChBLCBCKQkJKCgoQSkgKyAoQikpICYgfigoQikgLSAxKSkKIC8qCiAgKiBTaXplIG9mIG1hbGxvYygpIHBvb2wKICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL3BtOTI2My5oIGIvaW5jbHVkZS9jb25maWdzL3BtOTI2My5oCmluZGV4IGY4MTk3YjEuLmE2ZmYyOGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9wbTkyNjMuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvcG05MjYzLmgKQEAgLTM5Nyw3ICszOTcsNiBAQAogI2RlZmluZSBDT05GSUdfU1lTX0xPTkdIRUxQCQkxCiAjZGVmaW5lIENPTkZJR19DTURMSU5FX0VESVRJTkcJCTEKIAotI2RlZmluZSBST1VORChBLCBCKQkJCSgoKEEpICsgKEIpKSAmIH4oKEIpIC0gMSkpCiAvKgogICogU2l6ZSBvZiBtYWxsb2MoKSBwb29sCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9xZW11LW1pcHMuaCBiL2luY2x1ZGUvY29uZmlncy9xZW11LW1pcHMuaAppbmRleCA4NDQ0NDYyLi5jYmFjZGY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvcWVtdS1taXBzLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL3FlbXUtbWlwcy5oCkBAIC0xNjMsNiArMTYzLDggQEAKIAogI3VuZGVmIENPTkZJR19NRU1TSVpFX0lOX0JZVEVTCiAKKyNkZWZpbmUgQ09ORklHX0xaTUEKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogQ2FjaGUgQ29uZmlndXJhdGlvbgogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2x6bWEvTHptYURlY29kZS5oIGIvaW5jbHVkZS9sem1hL0x6bWFEZWMuaApzaW1pbGFyaXR5IGluZGV4IDgxJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2x6bWEvTHptYURlY29kZS5oCnJlbmFtZSB0byBpbmNsdWRlL2x6bWEvTHptYURlYy5oCmluZGV4IDhmZGIyYzAuLjk2N2NkZDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbHptYS9Mem1hRGVjb2RlLmgKKysrIGIvaW5jbHVkZS9sem1hL0x6bWFEZWMuaApAQCAtMSw3ICsxLDcgQEAKIC8qCi0gKiBGYWtlIGluY2x1ZGUgZm9yIEx6bWFEZWNvZGUuaAorICogRmFrZSBpbmNsdWRlIGZvciBMem1hRGVjLmgKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBJbmR1c3RyaWUgRGlhbCBGYWNlIFMucC5BLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgSW5kdXN0cmllIERpYWwgRmFjZSBTLnAuQS4KICAqIEx1aWdpICdDb21pbycgTWFudGVsbGluaSAobHVpZ2kubWFudGVsbGluaUBpZGYtaGl0LmNvbSkKICAqCiAgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjMsOSArMjMsOSBAQAogICogTUEgMDIxMTEtMTMwNyBVU0EKICAqLwogCi0jaWZuZGVmIF9fTFpNQURFQ09ERV9IX19GQUtFX18KLSNkZWZpbmUgX19MWk1BREVDT0RFX0hfX0ZBS0VfXworI2lmbmRlZiBfX0xaTUFERUNfSF9fRkFLRV9fCisjZGVmaW5lIF9fTFpNQURFQ19IX19GQUtFX18KIAotI2luY2x1ZGUgIi4uLy4uL2xpYl9nZW5lcmljL2x6bWEvTHptYURlY29kZS5oIgorI2luY2x1ZGUgIi4uLy4uL2xpYl9nZW5lcmljL2x6bWEvTHptYURlYy5oIgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbHptYS9Mem1hVG9vbHMuaCBiL2luY2x1ZGUvbHptYS9Mem1hVG9vbHMuaAppbmRleCA3YzVlZWExLi44Nzk0M2MwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2x6bWEvTHptYVRvb2xzLmgKKysrIGIvaW5jbHVkZS9sem1hL0x6bWFUb29scy5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIEZha2UgaW5jbHVkZSBmb3IgTHptYVRvb2xzLmgKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBJbmR1c3RyaWUgRGlhbCBGYWNlIFMucC5BLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgSW5kdXN0cmllIERpYWwgRmFjZSBTLnAuQS4KICAqIEx1aWdpICdDb21pbycgTWFudGVsbGluaSAobHVpZ2kubWFudGVsbGluaUBpZGYtaGl0LmNvbSkKICAqCiAgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9sem1hL0x6bWFUeXBlcy5oIGIvaW5jbHVkZS9sem1hL0x6bWFUeXBlcy5oCmluZGV4IDAyZGFhNTkuLjg2MTYwYTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbHptYS9Mem1hVHlwZXMuaAorKysgYi9pbmNsdWRlL2x6bWEvTHptYVR5cGVzLmgKQEAgLTEsNyArMSw3IEBACiAvKgotICogRmFrZSBpbmNsdWRlIGZvciBMem1hVHlwZXMuaAorICogRmFrZSBpbmNsdWRlIGZvciBUeXBlcy5oCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggSW5kdXN0cmllIERpYWwgRmFjZSBTLnAuQS4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IEluZHVzdHJpZSBEaWFsIEZhY2UgUy5wLkEuCiAgKiBMdWlnaSAnQ29taW8nIE1hbnRlbGxpbmkgKGx1aWdpLm1hbnRlbGxpbmlAaWRmLWhpdC5jb20pCiAgKgogICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTIzLDkgKzIzLDE0IEBACiAgKiBNQSAwMjExMS0xMzA3IFVTQQogICovCiAKLSNpZm5kZWYgX19MWk1BVFlQRVNfSF9fRkFLRV9fCi0jZGVmaW5lIF9fTFpNQVRZUEVTX0hfX0ZBS0VfXworI2lmbmRlZiBfX1RZUEVTX0hfX0ZBS0VfXworI2RlZmluZSBfX1RZUEVTX0hfX0ZBS0VfXwogCi0jaW5jbHVkZSAiLi4vLi4vbGliX2dlbmVyaWMvbHptYS9Mem1hVHlwZXMuaCIKKy8qCisgKlRoaXMgYXZvaWRzIHRoZSBjb2xsaXRpb24gd2l0aCB6bGliLmggQnl0ZSBkZWZpbml0aW9uCisgKi8KKyNkZWZpbmUgQnl0ZSBMWkJ5dGUKKworI2luY2x1ZGUgIi4uLy4uL2xpYl9nZW5lcmljL2x6bWEvVHlwZXMuaCIKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJfZ2VuZXJpYy9sem1hL0xHUEwudHh0IGIvbGliX2dlbmVyaWMvbHptYS9MR1BMLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWU3NmY1Yi4uMDAwMDAwMAotLS0gYS9saWJfZ2VuZXJpYy9sem1hL0xHUEwudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNTAyICswLDAgQEAKLSAgICAgIEdOVSBMRVNTRVIgR0VORVJBTCBQVUJMSUMgTElDRU5TRQotCSAgIFZlcnNpb24gMi4xLCBGZWJydWFyeSAxOTk5Ci0KLSBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0gICAgIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKLSBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KLQotW1RoaXMgaXMgdGhlIGZpcnN0IHJlbGVhc2VkIHZlcnNpb24gb2YgdGhlIExlc3NlciBHUEwuCUl0IGFsc28gY291bnRzCi0gYXMgdGhlIHN1Y2Nlc3NvciBvZiB0aGUgR05VIExpYnJhcnkgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwgaGVuY2UKLSB0aGUgdmVyc2lvbiBudW1iZXIgMi4xLl0KLQotCSAgUHJlYW1ibGUKLQotICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCi1mcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotTGljZW5zZXMgYXJlIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZQotZnJlZSBzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLgotCi0gIFRoaXMgbGljZW5zZSwgdGhlIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIHNvbWUKLXNwZWNpYWxseSBkZXNpZ25hdGVkIHNvZnR3YXJlIHBhY2thZ2VzLS10eXBpY2FsbHkgbGlicmFyaWVzLS1vZiB0aGUKLUZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgb3RoZXIgYXV0aG9ycyB3aG8gZGVjaWRlIHRvIHVzZSBpdC4gIFlvdQotY2FuIHVzZSBpdCB0b28sIGJ1dCB3ZSBzdWdnZXN0IHlvdSBmaXJzdCB0aGluayBjYXJlZnVsbHkgYWJvdXQgd2hldGhlcgotdGhpcyBsaWNlbnNlIG9yIHRoZSBvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIHRoZSBiZXR0ZXIKLXN0cmF0ZWd5IHRvIHVzZSBpbiBhbnkgcGFydGljdWxhciBjYXNlLCBiYXNlZCBvbiB0aGUgZXhwbGFuYXRpb25zIGJlbG93LgotCi0gIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tIG9mIHVzZSwKLW5vdCBwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQKLXlvdSBoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UKLWZvciB0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpOyB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQKLWl0IGlmIHlvdSB3YW50IGl0OyB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBhbmQgdXNlIHBpZWNlcyBvZgotaXQgaW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBhcmUgaW5mb3JtZWQgdGhhdCB5b3UgY2FuIGRvCi10aGVzZSB0aGluZ3MuCi0KLSAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAotZGlzdHJpYnV0b3JzIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGVzZQotcmlnaHRzLiAgVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yCi15b3UgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBsaWJyYXJ5IG9yIGlmIHlvdSBtb2RpZnkgaXQuCi0KLSAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgbGlicmFyeSwgd2hldGhlciBncmF0aXMKLW9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0IHdlIGdhdmUKLXlvdS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZSBzb3VyY2UKLWNvZGUuICBJZiB5b3UgbGluayBvdGhlciBjb2RlIHdpdGggdGhlIGxpYnJhcnksIHlvdSBtdXN0IHByb3ZpZGUKLWNvbXBsZXRlIG9iamVjdCBmaWxlcyB0byB0aGUgcmVjaXBpZW50cywgc28gdGhhdCB0aGV5IGNhbiByZWxpbmsgdGhlbQotd2l0aCB0aGUgbGlicmFyeSBhZnRlciBtYWtpbmcgY2hhbmdlcyB0byB0aGUgbGlicmFyeSBhbmQgcmVjb21waWxpbmcKLWl0LiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIgcmlnaHRzLgotCi0gIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCBhIHR3by1zdGVwIG1ldGhvZDogKDEpIHdlIGNvcHlyaWdodCB0aGUKLWxpYnJhcnksIGFuZCAoMikgd2Ugb2ZmZXIgeW91IHRoaXMgbGljZW5zZSwgd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsCi1wZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgbGlicmFyeS4KLQotICBUbyBwcm90ZWN0IGVhY2ggZGlzdHJpYnV0b3IsIHdlIHdhbnQgdG8gbWFrZSBpdCB2ZXJ5IGNsZWFyIHRoYXQKLXRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGUgZnJlZSBsaWJyYXJ5LiAgQWxzbywgaWYgdGhlIGxpYnJhcnkgaXMKLW1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB0aGUgcmVjaXBpZW50cyBzaG91bGQga25vdwotdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsIHZlcnNpb24sIHNvIHRoYXQgdGhlIG9yaWdpbmFsCi1hdXRob3IncyByZXB1dGF0aW9uIHdpbGwgbm90IGJlIGFmZmVjdGVkIGJ5IHByb2JsZW1zIHRoYXQgbWlnaHQgYmUKLWludHJvZHVjZWQgYnkgb3RoZXJzLgotDAotICBGaW5hbGx5LCBzb2Z0d2FyZSBwYXRlbnRzIHBvc2UgYSBjb25zdGFudCB0aHJlYXQgdG8gdGhlIGV4aXN0ZW5jZSBvZgotYW55IGZyZWUgcHJvZ3JhbS4gIFdlIHdpc2ggdG8gbWFrZSBzdXJlIHRoYXQgYSBjb21wYW55IGNhbm5vdAotZWZmZWN0aXZlbHkgcmVzdHJpY3QgdGhlIHVzZXJzIG9mIGEgZnJlZSBwcm9ncmFtIGJ5IG9idGFpbmluZyBhCi1yZXN0cmljdGl2ZSBsaWNlbnNlIGZyb20gYSBwYXRlbnQgaG9sZGVyLiAgVGhlcmVmb3JlLCB3ZSBpbnNpc3QgdGhhdAotYW55IHBhdGVudCBsaWNlbnNlIG9idGFpbmVkIGZvciBhIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgbXVzdCBiZQotY29uc2lzdGVudCB3aXRoIHRoZSBmdWxsIGZyZWVkb20gb2YgdXNlIHNwZWNpZmllZCBpbiB0aGlzIGxpY2Vuc2UuCi0KLSAgTW9zdCBHTlUgc29mdHdhcmUsIGluY2x1ZGluZyBzb21lIGxpYnJhcmllcywgaXMgY292ZXJlZCBieSB0aGUKLW9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBsaWNlbnNlLCB0aGUgR05VIExlc3NlcgotR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXBwbGllcyB0byBjZXJ0YWluIGRlc2lnbmF0ZWQgbGlicmFyaWVzLCBhbmQKLWlzIHF1aXRlIGRpZmZlcmVudCBmcm9tIHRoZSBvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgV2UgdXNlCi10aGlzIGxpY2Vuc2UgZm9yIGNlcnRhaW4gbGlicmFyaWVzIGluIG9yZGVyIHRvIHBlcm1pdCBsaW5raW5nIHRob3NlCi1saWJyYXJpZXMgaW50byBub24tZnJlZSBwcm9ncmFtcy4KLQotICBXaGVuIGEgcHJvZ3JhbSBpcyBsaW5rZWQgd2l0aCBhIGxpYnJhcnksIHdoZXRoZXIgc3RhdGljYWxseSBvciB1c2luZwotYSBzaGFyZWQgbGlicmFyeSwgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSB0d28gaXMgbGVnYWxseSBzcGVha2luZyBhCi1jb21iaW5lZCB3b3JrLCBhIGRlcml2YXRpdmUgb2YgdGhlIG9yaWdpbmFsIGxpYnJhcnkuICBUaGUgb3JkaW5hcnkKLUdlbmVyYWwgUHVibGljIExpY2Vuc2UgdGhlcmVmb3JlIHBlcm1pdHMgc3VjaCBsaW5raW5nIG9ubHkgaWYgdGhlCi1lbnRpcmUgY29tYmluYXRpb24gZml0cyBpdHMgY3JpdGVyaWEgb2YgZnJlZWRvbS4gIFRoZSBMZXNzZXIgR2VuZXJhbAotUHVibGljIExpY2Vuc2UgcGVybWl0cyBtb3JlIGxheCBjcml0ZXJpYSBmb3IgbGlua2luZyBvdGhlciBjb2RlIHdpdGgKLXRoZSBsaWJyYXJ5LgotCi0gIFdlIGNhbGwgdGhpcyBsaWNlbnNlIHRoZSAiTGVzc2VyIiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGJlY2F1c2UgaXQKLWRvZXMgTGVzcyB0byBwcm90ZWN0IHRoZSB1c2VyJ3MgZnJlZWRvbSB0aGFuIHRoZSBvcmRpbmFyeSBHZW5lcmFsCi1QdWJsaWMgTGljZW5zZS4gIEl0IGFsc28gcHJvdmlkZXMgb3RoZXIgZnJlZSBzb2Z0d2FyZSBkZXZlbG9wZXJzIExlc3MKLW9mIGFuIGFkdmFudGFnZSBvdmVyIGNvbXBldGluZyBub24tZnJlZSBwcm9ncmFtcy4gIFRoZXNlIGRpc2FkdmFudGFnZXMKLWFyZSB0aGUgcmVhc29uIHdlIHVzZSB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbWFueQotbGlicmFyaWVzLiAgSG93ZXZlciwgdGhlIExlc3NlciBsaWNlbnNlIHByb3ZpZGVzIGFkdmFudGFnZXMgaW4gY2VydGFpbgotc3BlY2lhbCBjaXJjdW1zdGFuY2VzLgotCi0gIEZvciBleGFtcGxlLCBvbiByYXJlIG9jY2FzaW9ucywgdGhlcmUgbWF5IGJlIGEgc3BlY2lhbCBuZWVkIHRvCi1lbmNvdXJhZ2UgdGhlIHdpZGVzdCBwb3NzaWJsZSB1c2Ugb2YgYSBjZXJ0YWluIGxpYnJhcnksIHNvIHRoYXQgaXQgYmVjb21lcwotYSBkZS1mYWN0byBzdGFuZGFyZC4gIFRvIGFjaGlldmUgdGhpcywgbm9uLWZyZWUgcHJvZ3JhbXMgbXVzdCBiZQotYWxsb3dlZCB0byB1c2UgdGhlIGxpYnJhcnkuICBBIG1vcmUgZnJlcXVlbnQgY2FzZSBpcyB0aGF0IGEgZnJlZQotbGlicmFyeSBkb2VzIHRoZSBzYW1lIGpvYiBhcyB3aWRlbHkgdXNlZCBub24tZnJlZSBsaWJyYXJpZXMuICBJbiB0aGlzCi1jYXNlLCB0aGVyZSBpcyBsaXR0bGUgdG8gZ2FpbiBieSBsaW1pdGluZyB0aGUgZnJlZSBsaWJyYXJ5IHRvIGZyZWUKLXNvZnR3YXJlIG9ubHksIHNvIHdlIHVzZSB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCi0KLSAgSW4gb3RoZXIgY2FzZXMsIHBlcm1pc3Npb24gdG8gdXNlIGEgcGFydGljdWxhciBsaWJyYXJ5IGluIG5vbi1mcmVlCi1wcm9ncmFtcyBlbmFibGVzIGEgZ3JlYXRlciBudW1iZXIgb2YgcGVvcGxlIHRvIHVzZSBhIGxhcmdlIGJvZHkgb2YKLWZyZWUgc29mdHdhcmUuCUZvciBleGFtcGxlLCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgR05VIEMgTGlicmFyeSBpbgotbm9uLWZyZWUgcHJvZ3JhbXMgZW5hYmxlcyBtYW55IG1vcmUgcGVvcGxlIHRvIHVzZSB0aGUgd2hvbGUgR05VCi1vcGVyYXRpbmcgc3lzdGVtLCBhcyB3ZWxsIGFzIGl0cyB2YXJpYW50LCB0aGUgR05VL0xpbnV4IG9wZXJhdGluZwotc3lzdGVtLgotCi0gIEFsdGhvdWdoIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBMZXNzIHByb3RlY3RpdmUgb2YgdGhlCi11c2VycycgZnJlZWRvbSwgaXQgZG9lcyBlbnN1cmUgdGhhdCB0aGUgdXNlciBvZiBhIHByb2dyYW0gdGhhdCBpcwotbGlua2VkIHdpdGggdGhlIExpYnJhcnkgaGFzIHRoZSBmcmVlZG9tIGFuZCB0aGUgd2hlcmV3aXRoYWwgdG8gcnVuCi10aGF0IHByb2dyYW0gdXNpbmcgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBMaWJyYXJ5LgotCi0gIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCi1tb2RpZmljYXRpb24gZm9sbG93LiAgUGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEKLSJ3b3JrIGJhc2VkIG9uIHRoZSBsaWJyYXJ5IiBhbmQgYSAid29yayB0aGF0IHVzZXMgdGhlIGxpYnJhcnkiLiAgVGhlCi1mb3JtZXIgY29udGFpbnMgY29kZSBkZXJpdmVkIGZyb20gdGhlIGxpYnJhcnksIHdoZXJlYXMgdGhlIGxhdHRlciBtdXN0Ci1iZSBjb21iaW5lZCB3aXRoIHRoZSBsaWJyYXJ5IGluIG9yZGVyIHRvIHJ1bi4KLQwKLSAgICAgIEdOVSBMRVNTRVIgR0VORVJBTCBQVUJMSUMgTElDRU5TRQotICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCi0KLSAgMC4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCBhcHBsaWVzIHRvIGFueSBzb2Z0d2FyZSBsaWJyYXJ5IG9yIG90aGVyCi1wcm9ncmFtIHdoaWNoIGNvbnRhaW5zIGEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBvcgotb3RoZXIgYXV0aG9yaXplZCBwYXJ0eSBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZgotdGhpcyBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoYWxzbyBjYWxsZWQgInRoaXMgTGljZW5zZSIpLgotRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCi0KLSAgQSAibGlicmFyeSIgbWVhbnMgYSBjb2xsZWN0aW9uIG9mIHNvZnR3YXJlIGZ1bmN0aW9ucyBhbmQvb3IgZGF0YQotcHJlcGFyZWQgc28gYXMgdG8gYmUgY29udmVuaWVudGx5IGxpbmtlZCB3aXRoIGFwcGxpY2F0aW9uIHByb2dyYW1zCi0od2hpY2ggdXNlIHNvbWUgb2YgdGhvc2UgZnVuY3Rpb25zIGFuZCBkYXRhKSB0byBmb3JtIGV4ZWN1dGFibGVzLgotCi0gIFRoZSAiTGlicmFyeSIsIGJlbG93LCByZWZlcnMgdG8gYW55IHN1Y2ggc29mdHdhcmUgbGlicmFyeSBvciB3b3JrCi13aGljaCBoYXMgYmVlbiBkaXN0cmlidXRlZCB1bmRlciB0aGVzZSB0ZXJtcy4gIEEgIndvcmsgYmFzZWQgb24gdGhlCi1MaWJyYXJ5IiBtZWFucyBlaXRoZXIgdGhlIExpYnJhcnkgb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlcgotY29weXJpZ2h0IGxhdzogdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBMaWJyYXJ5IG9yIGEKLXBvcnRpb24gb2YgaXQsIGVpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQKLXN0cmFpZ2h0Zm9yd2FyZGx5IGludG8gYW5vdGhlciBsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMKLWluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbiB0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pCi0KLSAgIlNvdXJjZSBjb2RlIiBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKLW1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGEgbGlicmFyeSwgY29tcGxldGUgc291cmNlIGNvZGUgbWVhbnMKLWFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkCi1pbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24KLWFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGxpYnJhcnkuCi0KLSAgQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKLWNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKLXJ1bm5pbmcgYSBwcm9ncmFtIHVzaW5nIHRoZSBMaWJyYXJ5IGlzIG5vdCByZXN0cmljdGVkLCBhbmQgb3V0cHV0IGZyb20KLXN1Y2ggYSBwcm9ncmFtIGlzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQKLW9uIHRoZSBMaWJyYXJ5IChpbmRlcGVuZGVudCBvZiB0aGUgdXNlIG9mIHRoZSBMaWJyYXJ5IGluIGEgdG9vbCBmb3IKLXdyaXRpbmcgaXQpLiAgV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBMaWJyYXJ5IGRvZXMKLWFuZCB3aGF0IHRoZSBwcm9ncmFtIHRoYXQgdXNlcyB0aGUgTGlicmFyeSBkb2VzLgotCi0gIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIExpYnJhcnkncwotY29tcGxldGUgc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQKLXlvdSBjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuCi1hcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdAotYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkKLXdhcnJhbnR5OyBhbmQgZGlzdHJpYnV0ZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlCi1MaWJyYXJ5LgotCi0gIFlvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksCi1hbmQgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhCi1mZWUuCi0MCi0gIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIExpYnJhcnkgb3IgYW55IHBvcnRpb24KLW9mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCBhbmQgY29weSBhbmQKLWRpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQotYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKLQotICAgIGEpIFRoZSBtb2RpZmllZCB3b3JrIG11c3QgaXRzZWxmIGJlIGEgc29mdHdhcmUgbGlicmFyeS4KLQotICAgIGIpIFlvdSBtdXN0IGNhdXNlIHRoZSBmaWxlcyBtb2RpZmllZCB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcwotICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCi0KLSAgICBjKSBZb3UgbXVzdCBjYXVzZSB0aGUgd2hvbGUgb2YgdGhlIHdvcmsgdG8gYmUgbGljZW5zZWQgYXQgbm8KLSAgICBjaGFyZ2UgdG8gYWxsIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KLQotICAgIGQpIElmIGEgZmFjaWxpdHkgaW4gdGhlIG1vZGlmaWVkIExpYnJhcnkgcmVmZXJzIHRvIGEgZnVuY3Rpb24gb3IgYQotICAgIHRhYmxlIG9mIGRhdGEgdG8gYmUgc3VwcGxpZWQgYnkgYW4gYXBwbGljYXRpb24gcHJvZ3JhbSB0aGF0IHVzZXMKLSAgICB0aGUgZmFjaWxpdHksIG90aGVyIHRoYW4gYXMgYW4gYXJndW1lbnQgcGFzc2VkIHdoZW4gdGhlIGZhY2lsaXR5Ci0gICAgaXMgaW52b2tlZCwgdGhlbiB5b3UgbXVzdCBtYWtlIGEgZ29vZCBmYWl0aCBlZmZvcnQgdG8gZW5zdXJlIHRoYXQsCi0gICAgaW4gdGhlIGV2ZW50IGFuIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBseSBzdWNoIGZ1bmN0aW9uIG9yCi0gICAgdGFibGUsIHRoZSBmYWNpbGl0eSBzdGlsbCBvcGVyYXRlcywgYW5kIHBlcmZvcm1zIHdoYXRldmVyIHBhcnQgb2YKLSAgICBpdHMgcHVycG9zZSByZW1haW5zIG1lYW5pbmdmdWwuCi0KLSAgICAoRm9yIGV4YW1wbGUsIGEgZnVuY3Rpb24gaW4gYSBsaWJyYXJ5IHRvIGNvbXB1dGUgc3F1YXJlIHJvb3RzIGhhcwotICAgIGEgcHVycG9zZSB0aGF0IGlzIGVudGlyZWx5IHdlbGwtZGVmaW5lZCBpbmRlcGVuZGVudCBvZiB0aGUKLSAgICBhcHBsaWNhdGlvbi4gIFRoZXJlZm9yZSwgU3Vic2VjdGlvbiAyZCByZXF1aXJlcyB0aGF0IGFueQotICAgIGFwcGxpY2F0aW9uLXN1cHBsaWVkIGZ1bmN0aW9uIG9yIHRhYmxlIHVzZWQgYnkgdGhpcyBmdW5jdGlvbiBtdXN0Ci0gICAgYmUgb3B0aW9uYWw6IGlmIHRoZSBhcHBsaWNhdGlvbiBkb2VzIG5vdCBzdXBwbHkgaXQsIHRoZSBzcXVhcmUKLSAgICByb290IGZ1bmN0aW9uIG11c3Qgc3RpbGwgY29tcHV0ZSBzcXVhcmUgcm9vdHMuKQotCi1UaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCi1pZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBMaWJyYXJ5LAotYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCi10aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCi1zZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKLWRpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAotb24gdGhlIExpYnJhcnksIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCi10aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQotZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlCi1pdC4KLQotVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0Ci15b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KLWV4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgotY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgTGlicmFyeS4KLQotSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgTGlicmFyeQotd2l0aCB0aGUgTGlicmFyeSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkpIG9uIGEgdm9sdW1lIG9mCi1hIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgotdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KLQotICAzLiBZb3UgbWF5IG9wdCB0byBhcHBseSB0aGUgdGVybXMgb2YgdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYwotTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZSB0byBhIGdpdmVuIGNvcHkgb2YgdGhlIExpYnJhcnkuICBUbyBkbwotdGhpcywgeW91IG11c3QgYWx0ZXIgYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlLCBzbwotdGhhdCB0aGV5IHJlZmVyIHRvIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLAotaW5zdGVhZCBvZiB0byB0aGlzIExpY2Vuc2UuICAoSWYgYSBuZXdlciB2ZXJzaW9uIHRoYW4gdmVyc2lvbiAyIG9mIHRoZQotb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaGFzIGFwcGVhcmVkLCB0aGVuIHlvdSBjYW4gc3BlY2lmeQotdGhhdCB2ZXJzaW9uIGluc3RlYWQgaWYgeW91IHdpc2guKSAgRG8gbm90IG1ha2UgYW55IG90aGVyIGNoYW5nZSBpbgotdGhlc2Ugbm90aWNlcy4KLQwKLSAgT25jZSB0aGlzIGNoYW5nZSBpcyBtYWRlIGluIGEgZ2l2ZW4gY29weSwgaXQgaXMgaXJyZXZlcnNpYmxlIGZvcgotdGhhdCBjb3B5LCBzbyB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBhbGwKLXN1YnNlcXVlbnQgY29waWVzIGFuZCBkZXJpdmF0aXZlIHdvcmtzIG1hZGUgZnJvbSB0aGF0IGNvcHkuCi0KLSAgVGhpcyBvcHRpb24gaXMgdXNlZnVsIHdoZW4geW91IHdpc2ggdG8gY29weSBwYXJ0IG9mIHRoZSBjb2RlIG9mCi10aGUgTGlicmFyeSBpbnRvIGEgcHJvZ3JhbSB0aGF0IGlzIG5vdCBhIGxpYnJhcnkuCi0KLSAgNC4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhIHBvcnRpb24gb3IKLWRlcml2YXRpdmUgb2YgaXQsIHVuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtCi11bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhY2NvbXBhbnkKLWl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSwgd2hpY2gKLW11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYQotbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLgotCi0gIElmIGRpc3RyaWJ1dGlvbiBvZiBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5Ci1mcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZQotc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBzYXRpc2ZpZXMgdGhlIHJlcXVpcmVtZW50IHRvCi1kaXN0cmlidXRlIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Ci1jb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgotCi0gIDUuIEEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIG5vIGRlcml2YXRpdmUgb2YgYW55IHBvcnRpb24gb2YgdGhlCi1MaWJyYXJ5LCBidXQgaXMgZGVzaWduZWQgdG8gd29yayB3aXRoIHRoZSBMaWJyYXJ5IGJ5IGJlaW5nIGNvbXBpbGVkIG9yCi1saW5rZWQgd2l0aCBpdCwgaXMgY2FsbGVkIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5Ii4gIFN1Y2ggYQotd29yaywgaW4gaXNvbGF0aW9uLCBpcyBub3QgYSBkZXJpdmF0aXZlIHdvcmsgb2YgdGhlIExpYnJhcnksIGFuZAotdGhlcmVmb3JlIGZhbGxzIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KLQotICBIb3dldmVyLCBsaW5raW5nIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB3aXRoIHRoZSBMaWJyYXJ5Ci1jcmVhdGVzIGFuIGV4ZWN1dGFibGUgdGhhdCBpcyBhIGRlcml2YXRpdmUgb2YgdGhlIExpYnJhcnkgKGJlY2F1c2UgaXQKLWNvbnRhaW5zIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5KSwgcmF0aGVyIHRoYW4gYSAid29yayB0aGF0IHVzZXMgdGhlCi1saWJyYXJ5Ii4gIFRoZSBleGVjdXRhYmxlIGlzIHRoZXJlZm9yZSBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZS4KLVNlY3Rpb24gNiBzdGF0ZXMgdGVybXMgZm9yIGRpc3RyaWJ1dGlvbiBvZiBzdWNoIGV4ZWN1dGFibGVzLgotCi0gIFdoZW4gYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHVzZXMgbWF0ZXJpYWwgZnJvbSBhIGhlYWRlciBmaWxlCi10aGF0IGlzIHBhcnQgb2YgdGhlIExpYnJhcnksIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgbWF5IGJlIGEKLWRlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSBldmVuIHRob3VnaCB0aGUgc291cmNlIGNvZGUgaXMgbm90LgotV2hldGhlciB0aGlzIGlzIHRydWUgaXMgZXNwZWNpYWxseSBzaWduaWZpY2FudCBpZiB0aGUgd29yayBjYW4gYmUKLWxpbmtlZCB3aXRob3V0IHRoZSBMaWJyYXJ5LCBvciBpZiB0aGUgd29yayBpcyBpdHNlbGYgYSBsaWJyYXJ5LiAgVGhlCi10aHJlc2hvbGQgZm9yIHRoaXMgdG8gYmUgdHJ1ZSBpcyBub3QgcHJlY2lzZWx5IGRlZmluZWQgYnkgbGF3LgotCi0gIElmIHN1Y2ggYW4gb2JqZWN0IGZpbGUgdXNlcyBvbmx5IG51bWVyaWNhbCBwYXJhbWV0ZXJzLCBkYXRhCi1zdHJ1Y3R1cmUgbGF5b3V0cyBhbmQgYWNjZXNzb3JzLCBhbmQgc21hbGwgbWFjcm9zIGFuZCBzbWFsbCBpbmxpbmUKLWZ1bmN0aW9ucyAodGVuIGxpbmVzIG9yIGxlc3MgaW4gbGVuZ3RoKSwgdGhlbiB0aGUgdXNlIG9mIHRoZSBvYmplY3QKLWZpbGUgaXMgdW5yZXN0cmljdGVkLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgaXMgbGVnYWxseSBhIGRlcml2YXRpdmUKLXdvcmsuICAoRXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGlzIG9iamVjdCBjb2RlIHBsdXMgcG9ydGlvbnMgb2YgdGhlCi1MaWJyYXJ5IHdpbGwgc3RpbGwgZmFsbCB1bmRlciBTZWN0aW9uIDYuKQotCi0gIE90aGVyd2lzZSwgaWYgdGhlIHdvcmsgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5LCB5b3UgbWF5Ci1kaXN0cmlidXRlIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gNi4KLUFueSBleGVjdXRhYmxlcyBjb250YWluaW5nIHRoYXQgd29yayBhbHNvIGZhbGwgdW5kZXIgU2VjdGlvbiA2LAotd2hldGhlciBvciBub3QgdGhleSBhcmUgbGlua2VkIGRpcmVjdGx5IHdpdGggdGhlIExpYnJhcnkgaXRzZWxmLgotDAotICA2LiBBcyBhbiBleGNlcHRpb24gdG8gdGhlIFNlY3Rpb25zIGFib3ZlLCB5b3UgbWF5IGFsc28gY29tYmluZSBvcgotbGluayBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgd2l0aCB0aGUgTGlicmFyeSB0byBwcm9kdWNlIGEKLXdvcmsgY29udGFpbmluZyBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSwgYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCi11bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgcHJvdmlkZWQgdGhhdCB0aGUgdGVybXMgcGVybWl0Ci1tb2RpZmljYXRpb24gb2YgdGhlIHdvcmsgZm9yIHRoZSBjdXN0b21lcidzIG93biB1c2UgYW5kIHJldmVyc2UKLWVuZ2luZWVyaW5nIGZvciBkZWJ1Z2dpbmcgc3VjaCBtb2RpZmljYXRpb25zLgotCi0gIFlvdSBtdXN0IGdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIGVhY2ggY29weSBvZiB0aGUgd29yayB0aGF0IHRoZQotTGlicmFyeSBpcyB1c2VkIGluIGl0IGFuZCB0aGF0IHRoZSBMaWJyYXJ5IGFuZCBpdHMgdXNlIGFyZSBjb3ZlcmVkIGJ5Ci10aGlzIExpY2Vuc2UuICBZb3UgbXVzdCBzdXBwbHkgYSBjb3B5IG9mIHRoaXMgTGljZW5zZS4JSWYgdGhlIHdvcmsKLWR1cmluZyBleGVjdXRpb24gZGlzcGxheXMgY29weXJpZ2h0IG5vdGljZXMsIHlvdSBtdXN0IGluY2x1ZGUgdGhlCi1jb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgTGlicmFyeSBhbW9uZyB0aGVtLCBhcyB3ZWxsIGFzIGEgcmVmZXJlbmNlCi1kaXJlY3RpbmcgdGhlIHVzZXIgdG8gdGhlIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiAgQWxzbywgeW91IG11c3QgZG8gb25lCi1vZiB0aGVzZSB0aGluZ3M6Ci0KLSAgICBhKSBBY2NvbXBhbnkgdGhlIHdvcmsgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZwotICAgIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUgZm9yIHRoZSBMaWJyYXJ5IGluY2x1ZGluZyB3aGF0ZXZlcgotICAgIGNoYW5nZXMgd2VyZSB1c2VkIGluIHRoZSB3b3JrICh3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyCi0gICAgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSk7IGFuZCwgaWYgdGhlIHdvcmsgaXMgYW4gZXhlY3V0YWJsZSBsaW5rZWQKLSAgICB3aXRoIHRoZSBMaWJyYXJ5LCB3aXRoIHRoZSBjb21wbGV0ZSBtYWNoaW5lLXJlYWRhYmxlICJ3b3JrIHRoYXQKLSAgICB1c2VzIHRoZSBMaWJyYXJ5IiwgYXMgb2JqZWN0IGNvZGUgYW5kL29yIHNvdXJjZSBjb2RlLCBzbyB0aGF0IHRoZQotICAgIHVzZXIgY2FuIG1vZGlmeSB0aGUgTGlicmFyeSBhbmQgdGhlbiByZWxpbmsgdG8gcHJvZHVjZSBhIG1vZGlmaWVkCi0gICAgZXhlY3V0YWJsZSBjb250YWluaW5nIHRoZSBtb2RpZmllZCBMaWJyYXJ5LiAgKEl0IGlzIHVuZGVyc3Rvb2QKLSAgICB0aGF0IHRoZSB1c2VyIHdobyBjaGFuZ2VzIHRoZSBjb250ZW50cyBvZiBkZWZpbml0aW9ucyBmaWxlcyBpbiB0aGUKLSAgICBMaWJyYXJ5IHdpbGwgbm90IG5lY2Vzc2FyaWx5IGJlIGFibGUgdG8gcmVjb21waWxlIHRoZSBhcHBsaWNhdGlvbgotICAgIHRvIHVzZSB0aGUgbW9kaWZpZWQgZGVmaW5pdGlvbnMuKQotCi0gICAgYikgVXNlIGEgc3VpdGFibGUgc2hhcmVkIGxpYnJhcnkgbWVjaGFuaXNtIGZvciBsaW5raW5nIHdpdGggdGhlCi0gICAgTGlicmFyeS4gIEEgc3VpdGFibGUgbWVjaGFuaXNtIGlzIG9uZSB0aGF0ICgxKSB1c2VzIGF0IHJ1biB0aW1lIGEKLSAgICBjb3B5IG9mIHRoZSBsaWJyYXJ5IGFscmVhZHkgcHJlc2VudCBvbiB0aGUgdXNlcidzIGNvbXB1dGVyIHN5c3RlbSwKLSAgICByYXRoZXIgdGhhbiBjb3B5aW5nIGxpYnJhcnkgZnVuY3Rpb25zIGludG8gdGhlIGV4ZWN1dGFibGUsIGFuZCAoMikKLSAgICB3aWxsIG9wZXJhdGUgcHJvcGVybHkgd2l0aCBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIGlmCi0gICAgdGhlIHVzZXIgaW5zdGFsbHMgb25lLCBhcyBsb25nIGFzIHRoZSBtb2RpZmllZCB2ZXJzaW9uIGlzCi0gICAgaW50ZXJmYWNlLWNvbXBhdGlibGUgd2l0aCB0aGUgdmVyc2lvbiB0aGF0IHRoZSB3b3JrIHdhcyBtYWRlIHdpdGguCi0KLSAgICBjKSBBY2NvbXBhbnkgdGhlIHdvcmsgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdAotICAgIGxlYXN0IHRocmVlIHllYXJzLCB0byBnaXZlIHRoZSBzYW1lIHVzZXIgdGhlIG1hdGVyaWFscwotICAgIHNwZWNpZmllZCBpbiBTdWJzZWN0aW9uIDZhLCBhYm92ZSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUKLSAgICB0aGFuIHRoZSBjb3N0IG9mIHBlcmZvcm1pbmcgdGhpcyBkaXN0cmlidXRpb24uCi0KLSAgICBkKSBJZiBkaXN0cmlidXRpb24gb2YgdGhlIHdvcmsgaXMgbWFkZSBieSBvZmZlcmluZyBhY2Nlc3MgdG8gY29weQotICAgIGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZSBhYm92ZQotICAgIHNwZWNpZmllZCBtYXRlcmlhbHMgZnJvbSB0aGUgc2FtZSBwbGFjZS4KLQotICAgIGUpIFZlcmlmeSB0aGF0IHRoZSB1c2VyIGhhcyBhbHJlYWR5IHJlY2VpdmVkIGEgY29weSBvZiB0aGVzZQotICAgIG1hdGVyaWFscyBvciB0aGF0IHlvdSBoYXZlIGFscmVhZHkgc2VudCB0aGlzIHVzZXIgYSBjb3B5LgotCi0gIEZvciBhbiBleGVjdXRhYmxlLCB0aGUgcmVxdWlyZWQgZm9ybSBvZiB0aGUgIndvcmsgdGhhdCB1c2VzIHRoZQotTGlicmFyeSIgbXVzdCBpbmNsdWRlIGFueSBkYXRhIGFuZCB1dGlsaXR5IHByb2dyYW1zIG5lZWRlZCBmb3IKLXJlcHJvZHVjaW5nIHRoZSBleGVjdXRhYmxlIGZyb20gaXQuICBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uLAotdGhlIG1hdGVyaWFscyB0byBiZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlIGFueXRoaW5nIHRoYXQgaXMKLW5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeSBmb3JtKSB3aXRoIHRoZSBtYWpvcgotY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBvbgotd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50IGl0c2VsZiBhY2NvbXBhbmllcwotdGhlIGV4ZWN1dGFibGUuCi0KLSAgSXQgbWF5IGhhcHBlbiB0aGF0IHRoaXMgcmVxdWlyZW1lbnQgY29udHJhZGljdHMgdGhlIGxpY2Vuc2UKLXJlc3RyaWN0aW9ucyBvZiBvdGhlciBwcm9wcmlldGFyeSBsaWJyYXJpZXMgdGhhdCBkbyBub3Qgbm9ybWFsbHkKLWFjY29tcGFueSB0aGUgb3BlcmF0aW5nIHN5c3RlbS4gIFN1Y2ggYSBjb250cmFkaWN0aW9uIG1lYW5zIHlvdSBjYW5ub3QKLXVzZSBib3RoIHRoZW0gYW5kIHRoZSBMaWJyYXJ5IHRvZ2V0aGVyIGluIGFuIGV4ZWN1dGFibGUgdGhhdCB5b3UKLWRpc3RyaWJ1dGUuCi0MCi0gIDcuIFlvdSBtYXkgcGxhY2UgbGlicmFyeSBmYWNpbGl0aWVzIHRoYXQgYXJlIGEgd29yayBiYXNlZCBvbiB0aGUKLUxpYnJhcnkgc2lkZS1ieS1zaWRlIGluIGEgc2luZ2xlIGxpYnJhcnkgdG9nZXRoZXIgd2l0aCBvdGhlciBsaWJyYXJ5Ci1mYWNpbGl0aWVzIG5vdCBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSwgYW5kIGRpc3RyaWJ1dGUgc3VjaCBhIGNvbWJpbmVkCi1saWJyYXJ5LCBwcm92aWRlZCB0aGF0IHRoZSBzZXBhcmF0ZSBkaXN0cmlidXRpb24gb2YgdGhlIHdvcmsgYmFzZWQgb24KLXRoZSBMaWJyYXJ5IGFuZCBvZiB0aGUgb3RoZXIgbGlicmFyeSBmYWNpbGl0aWVzIGlzIG90aGVyd2lzZQotcGVybWl0dGVkLCBhbmQgcHJvdmlkZWQgdGhhdCB5b3UgZG8gdGhlc2UgdHdvIHRoaW5nczoKLQotICAgIGEpIEFjY29tcGFueSB0aGUgY29tYmluZWQgbGlicmFyeSB3aXRoIGEgY29weSBvZiB0aGUgc2FtZSB3b3JrCi0gICAgYmFzZWQgb24gdGhlIExpYnJhcnksIHVuY29tYmluZWQgd2l0aCBhbnkgb3RoZXIgbGlicmFyeQotICAgIGZhY2lsaXRpZXMuICBUaGlzIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQotICAgIFNlY3Rpb25zIGFib3ZlLgotCi0gICAgYikgR2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggdGhlIGNvbWJpbmVkIGxpYnJhcnkgb2YgdGhlIGZhY3QKLSAgICB0aGF0IHBhcnQgb2YgaXQgaXMgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCBhbmQgZXhwbGFpbmluZwotICAgIHdoZXJlIHRvIGZpbmQgdGhlIGFjY29tcGFueWluZyB1bmNvbWJpbmVkIGZvcm0gb2YgdGhlIHNhbWUgd29yay4KLQotICA4LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGxpbmsgd2l0aCwgb3IgZGlzdHJpYnV0ZQotdGhlIExpYnJhcnkgZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkKLWF0dGVtcHQgb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvcgotZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBpcyB2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyCi1yaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLiAgSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsCi1vciByaWdodHMsIGZyb20geW91IHVuZGVyIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzCi10ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaCBwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCi0KLSAgOS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90Ci1zaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgotZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCi1wcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Ci1tb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBMaWJyYXJ5IChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKLUxpYnJhcnkpLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCi1hbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCi10aGUgTGlicmFyeSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KLQotICAxMC4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQotTGlicmFyeSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKLW9yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUsIGxpbmsgd2l0aCBvciBtb2RpZnkgdGhlIExpYnJhcnkKLXN1YmplY3QgdG8gdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuCVlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgotcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgotWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgd2l0aAotdGhpcyBMaWNlbnNlLgotDAotICAxMS4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAotaW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKLWNvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKLW90aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKLWV4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90Ci1kaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCi1MaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91Ci1tYXkgbm90IGRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgYXQgYWxsLglGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKLWxpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkgYnkKLWFsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgotdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bwotcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgTGlicmFyeS4KLQotSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFueQotcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvIGFwcGx5LAotYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIgY2lyY3Vtc3RhbmNlcy4KLQotSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQotcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKLXN1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKLWludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtIHdoaWNoIGlzCi1pbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKLWdlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKLXRocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0Ci1zeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCi10byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKLWltcG9zZSB0aGF0IGNob2ljZS4KLQotVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCi1iZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KLQotICAxMi4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBMaWJyYXJ5IGlzIHJlc3RyaWN0ZWQgaW4KLWNlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQotb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBMaWJyYXJ5IHVuZGVyIHRoaXMgTGljZW5zZSBtYXkgYWRkCi1hbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nIHRob3NlIGNvdW50cmllcywKLXNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nIGNvdW50cmllcyBub3QgdGh1cwotZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMgdGhlIGxpbWl0YXRpb24gYXMgaWYKLXdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgotCi0gIDEzLiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldwotdmVyc2lvbnMgb2YgdGhlIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLgotU3VjaCBuZXcgdmVyc2lvbnMgd2lsbCBiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLAotYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgotCi1FYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4JSWYgdGhlIExpYnJhcnkKLXNwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZAotImFueSBsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZAotY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieQotdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBMaWJyYXJ5IGRvZXMgbm90IHNwZWNpZnkgYQotbGljZW5zZSB2ZXJzaW9uIG51bWJlciwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkKLXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0MCi0gIDE0LiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgTGlicmFyeSBpbnRvIG90aGVyIGZyZWUKLXByb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBpbmNvbXBhdGlibGUgd2l0aCB0aGVzZSwKLXdyaXRlIHRvIHRoZSBhdXRob3IgdG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzCi1jb3B5cmlnaHRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZQotU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzIG1ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91cgotZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2FscyBvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cwotb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZCBvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcKLWFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCi0KLQkgIE5PIFdBUlJBTlRZCi0KLSAgMTUuIEJFQ0FVU0UgVEhFIExJQlJBUlkgSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PCi1XQVJSQU5UWSBGT1IgVEhFIExJQlJBUlksIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLgotRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IKLU9USEVSIFBBUlRJRVMgUFJPVklERSBUSEUgTElCUkFSWSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCi1LSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLUlNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFCi1MSUJSQVJZIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRSBMSUJSQVJZIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRQotVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgotCi0gIDE2LiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOCi1XUklUSU5HIFdJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWQotQU5EL09SIFJFRElTVFJJQlVURSBUSEUgTElCUkFSWSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UKLUZPUiBEQU1BR0VTLCBJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IKLUNPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFCi1MSUJSQVJZIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HCi1SRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkgWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQQotRkFJTFVSRSBPRiBUSEUgTElCUkFSWSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFNPRlRXQVJFKSwgRVZFTiBJRgotU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAotREFNQUdFUy4KLQotCSBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKLQwKLQkgICBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgTGlicmFyaWVzCi0KLSAgSWYgeW91IGRldmVsb3AgYSBuZXcgbGlicmFyeSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAotcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHdlIHJlY29tbWVuZCBtYWtpbmcgaXQgZnJlZSBzb2Z0d2FyZSB0aGF0Ci1ldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UuICBZb3UgY2FuIGRvIHNvIGJ5IHBlcm1pdHRpbmcKLXJlZGlzdHJpYnV0aW9uIHVuZGVyIHRoZXNlIHRlcm1zIChvciwgYWx0ZXJuYXRpdmVseSwgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQotb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSkuCi0KLSAgVG8gYXBwbHkgdGhlc2UgdGVybXMsIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIGxpYnJhcnkuICBJdCBpcwotc2FmZXN0IHRvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKLWNvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0IHRoZQotImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KLQotICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBsaWJyYXJ5J3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+Ci0gICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotCi1BbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KLQotWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIKLXNjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIGxpYnJhcnksIGlmCi1uZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6Ci0KLSAgWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUKLSAgbGlicmFyeSBgRnJvYicgKGEgbGlicmFyeSBmb3IgdHdlYWtpbmcga25vYnMpIHdyaXR0ZW4gYnkgSmFtZXMgUmFuZG9tIEhhY2tlci4KLQotICA8c2lnbmF0dXJlIG9mIFR5IENvb24+LCAxIEFwcmlsIDE5OTAKLSAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKLQotVGhhdCdzIGFsbCB0aGVyZSBpcyB0byBpdCEKZGlmZiAtLWdpdCBhL2xpYl9nZW5lcmljL2x6bWEvTHptYURlYy5jIGIvbGliX2dlbmVyaWMvbHptYS9Mem1hRGVjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODlkOTM0YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYl9nZW5lcmljL2x6bWEvTHptYURlYy5jCkBAIC0wLDAgKzEsMTAwNyBAQAorLyogTHptYURlYy5jIC0tIExaTUEgRGVjb2RlcgorMjAwOC0xMS0wNiA6IElnb3IgUGF2bG92IDogUHVibGljIGRvbWFpbiAqLworCisjaW5jbHVkZSAiTHptYURlYy5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNkZWZpbmUga051bVRvcEJpdHMgMjQKKyNkZWZpbmUga1RvcFZhbHVlICgoVUludDMyKTEgPDwga051bVRvcEJpdHMpCisKKyNkZWZpbmUga051bUJpdE1vZGVsVG90YWxCaXRzIDExCisjZGVmaW5lIGtCaXRNb2RlbFRvdGFsICgxIDw8IGtOdW1CaXRNb2RlbFRvdGFsQml0cykKKyNkZWZpbmUga051bU1vdmVCaXRzIDUKKworI2RlZmluZSBSQ19JTklUX1NJWkUgNQorCisjZGVmaW5lIE5PUk1BTElaRSBpZiAocmFuZ2UgPCBrVG9wVmFsdWUpIHsgcmFuZ2UgPDw9IDg7IGNvZGUgPSAoY29kZSA8PCA4KSB8ICgqYnVmKyspOyB9CisKKyNkZWZpbmUgSUZfQklUXzAocCkgdHR0ID0gKihwKTsgTk9STUFMSVpFOyBib3VuZCA9IChyYW5nZSA+PiBrTnVtQml0TW9kZWxUb3RhbEJpdHMpICogdHR0OyBpZiAoY29kZSA8IGJvdW5kKQorI2RlZmluZSBVUERBVEVfMChwKSByYW5nZSA9IGJvdW5kOyAqKHApID0gKENMem1hUHJvYikodHR0ICsgKChrQml0TW9kZWxUb3RhbCAtIHR0dCkgPj4ga051bU1vdmVCaXRzKSk7CisjZGVmaW5lIFVQREFURV8xKHApIHJhbmdlIC09IGJvdW5kOyBjb2RlIC09IGJvdW5kOyAqKHApID0gKENMem1hUHJvYikodHR0IC0gKHR0dCA+PiBrTnVtTW92ZUJpdHMpKTsKKyNkZWZpbmUgR0VUX0JJVDIocCwgaSwgQTAsIEExKSBJRl9CSVRfMChwKSBcCisgIHsgVVBEQVRFXzAocCk7IGkgPSAoaSArIGkpOyBBMDsgfSBlbHNlIFwKKyAgeyBVUERBVEVfMShwKTsgaSA9IChpICsgaSkgKyAxOyBBMTsgfQorI2RlZmluZSBHRVRfQklUKHAsIGkpIEdFVF9CSVQyKHAsIGksIDsgLCA7KQorCisjZGVmaW5lIFRSRUVfR0VUX0JJVChwcm9icywgaSkgeyBHRVRfQklUKChwcm9icyArIGkpLCBpKTsgfQorI2RlZmluZSBUUkVFX0RFQ09ERShwcm9icywgbGltaXQsIGkpIFwKKyAgeyBpID0gMTsgZG8geyBUUkVFX0dFVF9CSVQocHJvYnMsIGkpOyB9IHdoaWxlIChpIDwgbGltaXQpOyBpIC09IGxpbWl0OyB9CisKKy8qICNkZWZpbmUgX0xaTUFfU0laRV9PUFQgKi8KKworI2lmZGVmIF9MWk1BX1NJWkVfT1BUCisjZGVmaW5lIFRSRUVfNl9ERUNPREUocHJvYnMsIGkpIFRSRUVfREVDT0RFKHByb2JzLCAoMSA8PCA2KSwgaSkKKyNlbHNlCisjZGVmaW5lIFRSRUVfNl9ERUNPREUocHJvYnMsIGkpIFwKKyAgeyBpID0gMTsgXAorICBUUkVFX0dFVF9CSVQocHJvYnMsIGkpOyBcCisgIFRSRUVfR0VUX0JJVChwcm9icywgaSk7IFwKKyAgVFJFRV9HRVRfQklUKHByb2JzLCBpKTsgXAorICBUUkVFX0dFVF9CSVQocHJvYnMsIGkpOyBcCisgIFRSRUVfR0VUX0JJVChwcm9icywgaSk7IFwKKyAgVFJFRV9HRVRfQklUKHByb2JzLCBpKTsgXAorICBpIC09IDB4NDA7IH0KKyNlbmRpZgorCisjZGVmaW5lIE5PUk1BTElaRV9DSEVDSyBpZiAocmFuZ2UgPCBrVG9wVmFsdWUpIHsgaWYgKGJ1ZiA+PSBidWZMaW1pdCkgcmV0dXJuIERVTU1ZX0VSUk9SOyByYW5nZSA8PD0gODsgY29kZSA9IChjb2RlIDw8IDgpIHwgKCpidWYrKyk7IH0KKworI2RlZmluZSBJRl9CSVRfMF9DSEVDSyhwKSB0dHQgPSAqKHApOyBOT1JNQUxJWkVfQ0hFQ0s7IGJvdW5kID0gKHJhbmdlID4+IGtOdW1CaXRNb2RlbFRvdGFsQml0cykgKiB0dHQ7IGlmIChjb2RlIDwgYm91bmQpCisjZGVmaW5lIFVQREFURV8wX0NIRUNLIHJhbmdlID0gYm91bmQ7CisjZGVmaW5lIFVQREFURV8xX0NIRUNLIHJhbmdlIC09IGJvdW5kOyBjb2RlIC09IGJvdW5kOworI2RlZmluZSBHRVRfQklUMl9DSEVDSyhwLCBpLCBBMCwgQTEpIElGX0JJVF8wX0NIRUNLKHApIFwKKyAgeyBVUERBVEVfMF9DSEVDSzsgaSA9IChpICsgaSk7IEEwOyB9IGVsc2UgXAorICB7IFVQREFURV8xX0NIRUNLOyBpID0gKGkgKyBpKSArIDE7IEExOyB9CisjZGVmaW5lIEdFVF9CSVRfQ0hFQ0socCwgaSkgR0VUX0JJVDJfQ0hFQ0socCwgaSwgOyAsIDspCisjZGVmaW5lIFRSRUVfREVDT0RFX0NIRUNLKHByb2JzLCBsaW1pdCwgaSkgXAorICB7IGkgPSAxOyBkbyB7IEdFVF9CSVRfQ0hFQ0socHJvYnMgKyBpLCBpKSB9IHdoaWxlIChpIDwgbGltaXQpOyBpIC09IGxpbWl0OyB9CisKKworI2RlZmluZSBrTnVtUG9zQml0c01heCA0CisjZGVmaW5lIGtOdW1Qb3NTdGF0ZXNNYXggKDEgPDwga051bVBvc0JpdHNNYXgpCisKKyNkZWZpbmUga0xlbk51bUxvd0JpdHMgMworI2RlZmluZSBrTGVuTnVtTG93U3ltYm9scyAoMSA8PCBrTGVuTnVtTG93Qml0cykKKyNkZWZpbmUga0xlbk51bU1pZEJpdHMgMworI2RlZmluZSBrTGVuTnVtTWlkU3ltYm9scyAoMSA8PCBrTGVuTnVtTWlkQml0cykKKyNkZWZpbmUga0xlbk51bUhpZ2hCaXRzIDgKKyNkZWZpbmUga0xlbk51bUhpZ2hTeW1ib2xzICgxIDw8IGtMZW5OdW1IaWdoQml0cykKKworI2RlZmluZSBMZW5DaG9pY2UgMAorI2RlZmluZSBMZW5DaG9pY2UyIChMZW5DaG9pY2UgKyAxKQorI2RlZmluZSBMZW5Mb3cgKExlbkNob2ljZTIgKyAxKQorI2RlZmluZSBMZW5NaWQgKExlbkxvdyArIChrTnVtUG9zU3RhdGVzTWF4IDw8IGtMZW5OdW1Mb3dCaXRzKSkKKyNkZWZpbmUgTGVuSGlnaCAoTGVuTWlkICsgKGtOdW1Qb3NTdGF0ZXNNYXggPDwga0xlbk51bU1pZEJpdHMpKQorI2RlZmluZSBrTnVtTGVuUHJvYnMgKExlbkhpZ2ggKyBrTGVuTnVtSGlnaFN5bWJvbHMpCisKKworI2RlZmluZSBrTnVtU3RhdGVzIDEyCisjZGVmaW5lIGtOdW1MaXRTdGF0ZXMgNworCisjZGVmaW5lIGtTdGFydFBvc01vZGVsSW5kZXggNAorI2RlZmluZSBrRW5kUG9zTW9kZWxJbmRleCAxNAorI2RlZmluZSBrTnVtRnVsbERpc3RhbmNlcyAoMSA8PCAoa0VuZFBvc01vZGVsSW5kZXggPj4gMSkpCisKKyNkZWZpbmUga051bVBvc1Nsb3RCaXRzIDYKKyNkZWZpbmUga051bUxlblRvUG9zU3RhdGVzIDQKKworI2RlZmluZSBrTnVtQWxpZ25CaXRzIDQKKyNkZWZpbmUga0FsaWduVGFibGVTaXplICgxIDw8IGtOdW1BbGlnbkJpdHMpCisKKyNkZWZpbmUga01hdGNoTWluTGVuIDIKKyNkZWZpbmUga01hdGNoU3BlY0xlblN0YXJ0IChrTWF0Y2hNaW5MZW4gKyBrTGVuTnVtTG93U3ltYm9scyArIGtMZW5OdW1NaWRTeW1ib2xzICsga0xlbk51bUhpZ2hTeW1ib2xzKQorCisjZGVmaW5lIElzTWF0Y2ggMAorI2RlZmluZSBJc1JlcCAoSXNNYXRjaCArIChrTnVtU3RhdGVzIDw8IGtOdW1Qb3NCaXRzTWF4KSkKKyNkZWZpbmUgSXNSZXBHMCAoSXNSZXAgKyBrTnVtU3RhdGVzKQorI2RlZmluZSBJc1JlcEcxIChJc1JlcEcwICsga051bVN0YXRlcykKKyNkZWZpbmUgSXNSZXBHMiAoSXNSZXBHMSArIGtOdW1TdGF0ZXMpCisjZGVmaW5lIElzUmVwMExvbmcgKElzUmVwRzIgKyBrTnVtU3RhdGVzKQorI2RlZmluZSBQb3NTbG90IChJc1JlcDBMb25nICsgKGtOdW1TdGF0ZXMgPDwga051bVBvc0JpdHNNYXgpKQorI2RlZmluZSBTcGVjUG9zIChQb3NTbG90ICsgKGtOdW1MZW5Ub1Bvc1N0YXRlcyA8PCBrTnVtUG9zU2xvdEJpdHMpKQorI2RlZmluZSBBbGlnbiAoU3BlY1BvcyArIGtOdW1GdWxsRGlzdGFuY2VzIC0ga0VuZFBvc01vZGVsSW5kZXgpCisjZGVmaW5lIExlbkNvZGVyIChBbGlnbiArIGtBbGlnblRhYmxlU2l6ZSkKKyNkZWZpbmUgUmVwTGVuQ29kZXIgKExlbkNvZGVyICsga051bUxlblByb2JzKQorI2RlZmluZSBMaXRlcmFsIChSZXBMZW5Db2RlciArIGtOdW1MZW5Qcm9icykKKworI2RlZmluZSBMWk1BX0JBU0VfU0laRSAxODQ2CisjZGVmaW5lIExaTUFfTElUX1NJWkUgNzY4CisKKyNkZWZpbmUgTHptYVByb3BzX0dldE51bVByb2JzKHApICgoVUludDMyKUxaTUFfQkFTRV9TSVpFICsgKExaTUFfTElUX1NJWkUgPDwgKChwKS0+bGMgKyAocCktPmxwKSkpCisKKyNpZiBMaXRlcmFsICE9IExaTUFfQkFTRV9TSVpFCitTdG9wQ29tcGlsaW5nRHVlQlVHCisjZW5kaWYKKworc3RhdGljIGNvbnN0IEJ5dGUga0xpdGVyYWxOZXh0U3RhdGVzW2tOdW1TdGF0ZXMgKiAyXSA9Cit7CisgIDAsIDAsIDAsIDAsIDEsIDIsIDMsICA0LCAgNSwgIDYsICA0LCAgNSwKKyAgNywgNywgNywgNywgNywgNywgNywgMTAsIDEwLCAxMCwgMTAsIDEwCit9OworCisjZGVmaW5lIExaTUFfRElDX01JTiAoMSA8PCAxMikKKworLyogRmlyc3QgTFpNQS1zeW1ib2wgaXMgYWx3YXlzIGRlY29kZWQuCitBbmQgaXQgZGVjb2RlcyBuZXcgTFpNQS1zeW1ib2xzIHdoaWxlIChidWYgPCBidWZMaW1pdCksIGJ1dCAiYnVmIiBpcyB3aXRob3V0IGxhc3Qgbm9ybWFsaXphdGlvbgorT3V0OgorICBSZXN1bHQ6CisgICAgU1pfT0sgLSBPSworICAgIFNaX0VSUk9SX0RBVEEgLSBFcnJvcgorICBwLT5yZW1haW5MZW46CisgICAgPCBrTWF0Y2hTcGVjTGVuU3RhcnQgOiBub3JtYWwgcmVtYWluCisgICAgPSBrTWF0Y2hTcGVjTGVuU3RhcnQgOiBmaW5pc2hlZAorICAgID0ga01hdGNoU3BlY0xlblN0YXJ0ICsgMSA6IEZsdXNoIG1hcmtlcgorICAgID0ga01hdGNoU3BlY0xlblN0YXJ0ICsgMiA6IFN0YXRlIEluaXQgTWFya2VyCisqLworCitzdGF0aWMgaW50IE1ZX0ZBU1RfQ0FMTCBMem1hRGVjX0RlY29kZVJlYWwoQ0x6bWFEZWMgKnAsIFNpemVUIGxpbWl0LCBjb25zdCBCeXRlICpidWZMaW1pdCkKK3sKKyAgQ0x6bWFQcm9iICpwcm9icyA9IHAtPnByb2JzOworCisgIHVuc2lnbmVkIHN0YXRlID0gcC0+c3RhdGU7CisgIFVJbnQzMiByZXAwID0gcC0+cmVwc1swXSwgcmVwMSA9IHAtPnJlcHNbMV0sIHJlcDIgPSBwLT5yZXBzWzJdLCByZXAzID0gcC0+cmVwc1szXTsKKyAgdW5zaWduZWQgcGJNYXNrID0gKCh1bnNpZ25lZCkxIDw8IChwLT5wcm9wLnBiKSkgLSAxOworICB1bnNpZ25lZCBscE1hc2sgPSAoKHVuc2lnbmVkKTEgPDwgKHAtPnByb3AubHApKSAtIDE7CisgIHVuc2lnbmVkIGxjID0gcC0+cHJvcC5sYzsKKworICBCeXRlICpkaWMgPSBwLT5kaWM7CisgIFNpemVUIGRpY0J1ZlNpemUgPSBwLT5kaWNCdWZTaXplOworICBTaXplVCBkaWNQb3MgPSBwLT5kaWNQb3M7CisKKyAgVUludDMyIHByb2Nlc3NlZFBvcyA9IHAtPnByb2Nlc3NlZFBvczsKKyAgVUludDMyIGNoZWNrRGljU2l6ZSA9IHAtPmNoZWNrRGljU2l6ZTsKKyAgdW5zaWduZWQgbGVuID0gMDsKKworICBjb25zdCBCeXRlICpidWYgPSBwLT5idWY7CisgIFVJbnQzMiByYW5nZSA9IHAtPnJhbmdlOworICBVSW50MzIgY29kZSA9IHAtPmNvZGU7CisKKyAgZG8KKyAgeworICAgIENMem1hUHJvYiAqcHJvYjsKKyAgICBVSW50MzIgYm91bmQ7CisgICAgdW5zaWduZWQgdHR0OworICAgIHVuc2lnbmVkIHBvc1N0YXRlID0gcHJvY2Vzc2VkUG9zICYgcGJNYXNrOworCisgICAgcHJvYiA9IHByb2JzICsgSXNNYXRjaCArIChzdGF0ZSA8PCBrTnVtUG9zQml0c01heCkgKyBwb3NTdGF0ZTsKKyAgICBJRl9CSVRfMChwcm9iKQorICAgIHsKKyAgICAgIHVuc2lnbmVkIHN5bWJvbDsKKyAgICAgIFVQREFURV8wKHByb2IpOworICAgICAgcHJvYiA9IHByb2JzICsgTGl0ZXJhbDsKKyAgICAgIGlmIChjaGVja0RpY1NpemUgIT0gMCB8fCBwcm9jZXNzZWRQb3MgIT0gMCkKKyAgICAgICAgcHJvYiArPSAoTFpNQV9MSVRfU0laRSAqICgoKHByb2Nlc3NlZFBvcyAmIGxwTWFzaykgPDwgbGMpICsKKyAgICAgICAgKGRpY1soZGljUG9zID09IDAgPyBkaWNCdWZTaXplIDogZGljUG9zKSAtIDFdID4+ICg4IC0gbGMpKSkpOworCisgICAgICBpZiAoc3RhdGUgPCBrTnVtTGl0U3RhdGVzKQorICAgICAgeworICAgICAgICBzeW1ib2wgPSAxOworICAgICAgICBkbyB7IEdFVF9CSVQocHJvYiArIHN5bWJvbCwgc3ltYm9sKSB9IHdoaWxlIChzeW1ib2wgPCAweDEwMCk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIHVuc2lnbmVkIG1hdGNoQnl0ZSA9IHAtPmRpY1soZGljUG9zIC0gcmVwMCkgKyAoKGRpY1BvcyA8IHJlcDApID8gZGljQnVmU2l6ZSA6IDApXTsKKyAgICAgICAgdW5zaWduZWQgb2ZmcyA9IDB4MTAwOworICAgICAgICBzeW1ib2wgPSAxOworICAgICAgICBkbworICAgICAgICB7CisgICAgICAgICAgdW5zaWduZWQgYml0OworICAgICAgICAgIENMem1hUHJvYiAqcHJvYkxpdDsKKyAgICAgICAgICBtYXRjaEJ5dGUgPDw9IDE7CisgICAgICAgICAgYml0ID0gKG1hdGNoQnl0ZSAmIG9mZnMpOworICAgICAgICAgIHByb2JMaXQgPSBwcm9iICsgb2ZmcyArIGJpdCArIHN5bWJvbDsKKyAgICAgICAgICBHRVRfQklUMihwcm9iTGl0LCBzeW1ib2wsIG9mZnMgJj0gfmJpdCwgb2ZmcyAmPSBiaXQpCisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKHN5bWJvbCA8IDB4MTAwKTsKKyAgICAgIH0KKyAgICAgIGRpY1tkaWNQb3MrK10gPSAoQnl0ZSlzeW1ib2w7CisgICAgICBwcm9jZXNzZWRQb3MrKzsKKworICAgICAgc3RhdGUgPSBrTGl0ZXJhbE5leHRTdGF0ZXNbc3RhdGVdOworICAgICAgLyogaWYgKHN0YXRlIDwgNCkgc3RhdGUgPSAwOyBlbHNlIGlmIChzdGF0ZSA8IDEwKSBzdGF0ZSAtPSAzOyBlbHNlIHN0YXRlIC09IDY7ICovCisgICAgICBjb250aW51ZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIFVQREFURV8xKHByb2IpOworICAgICAgcHJvYiA9IHByb2JzICsgSXNSZXAgKyBzdGF0ZTsKKyAgICAgIElGX0JJVF8wKHByb2IpCisgICAgICB7CisgICAgICAgIFVQREFURV8wKHByb2IpOworICAgICAgICBzdGF0ZSArPSBrTnVtU3RhdGVzOworICAgICAgICBwcm9iID0gcHJvYnMgKyBMZW5Db2RlcjsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgVVBEQVRFXzEocHJvYik7CisgICAgICAgIGlmIChjaGVja0RpY1NpemUgPT0gMCAmJiBwcm9jZXNzZWRQb3MgPT0gMCkKKyAgICAgICAgICByZXR1cm4gU1pfRVJST1JfREFUQTsKKyAgICAgICAgcHJvYiA9IHByb2JzICsgSXNSZXBHMCArIHN0YXRlOworICAgICAgICBJRl9CSVRfMChwcm9iKQorICAgICAgICB7CisgICAgICAgICAgVVBEQVRFXzAocHJvYik7CisgICAgICAgICAgcHJvYiA9IHByb2JzICsgSXNSZXAwTG9uZyArIChzdGF0ZSA8PCBrTnVtUG9zQml0c01heCkgKyBwb3NTdGF0ZTsKKyAgICAgICAgICBJRl9CSVRfMChwcm9iKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIFVQREFURV8wKHByb2IpOworICAgICAgICAgICAgZGljW2RpY1Bvc10gPSBkaWNbKGRpY1BvcyAtIHJlcDApICsgKChkaWNQb3MgPCByZXAwKSA/IGRpY0J1ZlNpemUgOiAwKV07CisgICAgICAgICAgICBkaWNQb3MrKzsKKyAgICAgICAgICAgIHByb2Nlc3NlZFBvcysrOworICAgICAgICAgICAgc3RhdGUgPSBzdGF0ZSA8IGtOdW1MaXRTdGF0ZXMgPyA5IDogMTE7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICB9CisgICAgICAgICAgVVBEQVRFXzEocHJvYik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgVUludDMyIGRpc3RhbmNlOworICAgICAgICAgIFVQREFURV8xKHByb2IpOworICAgICAgICAgIHByb2IgPSBwcm9icyArIElzUmVwRzEgKyBzdGF0ZTsKKyAgICAgICAgICBJRl9CSVRfMChwcm9iKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIFVQREFURV8wKHByb2IpOworICAgICAgICAgICAgZGlzdGFuY2UgPSByZXAxOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgVVBEQVRFXzEocHJvYik7CisgICAgICAgICAgICBwcm9iID0gcHJvYnMgKyBJc1JlcEcyICsgc3RhdGU7CisgICAgICAgICAgICBJRl9CSVRfMChwcm9iKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBVUERBVEVfMChwcm9iKTsKKyAgICAgICAgICAgICAgZGlzdGFuY2UgPSByZXAyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBVUERBVEVfMShwcm9iKTsKKyAgICAgICAgICAgICAgZGlzdGFuY2UgPSByZXAzOworICAgICAgICAgICAgICByZXAzID0gcmVwMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlcDIgPSByZXAxOworICAgICAgICAgIH0KKyAgICAgICAgICByZXAxID0gcmVwMDsKKyAgICAgICAgICByZXAwID0gZGlzdGFuY2U7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGUgPSBzdGF0ZSA8IGtOdW1MaXRTdGF0ZXMgPyA4IDogMTE7CisgICAgICAgIHByb2IgPSBwcm9icyArIFJlcExlbkNvZGVyOworICAgICAgfQorICAgICAgeworICAgICAgICB1bnNpZ25lZCBsaW1pdCwgb2Zmc2V0OworICAgICAgICBDTHptYVByb2IgKnByb2JMZW4gPSBwcm9iICsgTGVuQ2hvaWNlOworICAgICAgICBJRl9CSVRfMChwcm9iTGVuKQorICAgICAgICB7CisgICAgICAgICAgVVBEQVRFXzAocHJvYkxlbik7CisgICAgICAgICAgcHJvYkxlbiA9IHByb2IgKyBMZW5Mb3cgKyAocG9zU3RhdGUgPDwga0xlbk51bUxvd0JpdHMpOworICAgICAgICAgIG9mZnNldCA9IDA7CisgICAgICAgICAgbGltaXQgPSAoMSA8PCBrTGVuTnVtTG93Qml0cyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgVVBEQVRFXzEocHJvYkxlbik7CisgICAgICAgICAgcHJvYkxlbiA9IHByb2IgKyBMZW5DaG9pY2UyOworICAgICAgICAgIElGX0JJVF8wKHByb2JMZW4pCisgICAgICAgICAgeworICAgICAgICAgICAgVVBEQVRFXzAocHJvYkxlbik7CisgICAgICAgICAgICBwcm9iTGVuID0gcHJvYiArIExlbk1pZCArIChwb3NTdGF0ZSA8PCBrTGVuTnVtTWlkQml0cyk7CisgICAgICAgICAgICBvZmZzZXQgPSBrTGVuTnVtTG93U3ltYm9sczsKKyAgICAgICAgICAgIGxpbWl0ID0gKDEgPDwga0xlbk51bU1pZEJpdHMpOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgVVBEQVRFXzEocHJvYkxlbik7CisgICAgICAgICAgICBwcm9iTGVuID0gcHJvYiArIExlbkhpZ2g7CisgICAgICAgICAgICBvZmZzZXQgPSBrTGVuTnVtTG93U3ltYm9scyArIGtMZW5OdW1NaWRTeW1ib2xzOworICAgICAgICAgICAgbGltaXQgPSAoMSA8PCBrTGVuTnVtSGlnaEJpdHMpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBUUkVFX0RFQ09ERShwcm9iTGVuLCBsaW1pdCwgbGVuKTsKKyAgICAgICAgbGVuICs9IG9mZnNldDsKKyAgICAgIH0KKworICAgICAgaWYgKHN0YXRlID49IGtOdW1TdGF0ZXMpCisgICAgICB7CisgICAgICAgIFVJbnQzMiBkaXN0YW5jZTsKKyAgICAgICAgcHJvYiA9IHByb2JzICsgUG9zU2xvdCArCisgICAgICAgICAgICAoKGxlbiA8IGtOdW1MZW5Ub1Bvc1N0YXRlcyA/IGxlbiA6IGtOdW1MZW5Ub1Bvc1N0YXRlcyAtIDEpIDw8IGtOdW1Qb3NTbG90Qml0cyk7CisgICAgICAgIFRSRUVfNl9ERUNPREUocHJvYiwgZGlzdGFuY2UpOworICAgICAgICBpZiAoZGlzdGFuY2UgPj0ga1N0YXJ0UG9zTW9kZWxJbmRleCkKKyAgICAgICAgeworICAgICAgICAgIHVuc2lnbmVkIHBvc1Nsb3QgPSAodW5zaWduZWQpZGlzdGFuY2U7CisgICAgICAgICAgaW50IG51bURpcmVjdEJpdHMgPSAoaW50KSgoKGRpc3RhbmNlID4+IDEpIC0gMSkpOworICAgICAgICAgIGRpc3RhbmNlID0gKDIgfCAoZGlzdGFuY2UgJiAxKSk7CisgICAgICAgICAgaWYgKHBvc1Nsb3QgPCBrRW5kUG9zTW9kZWxJbmRleCkKKyAgICAgICAgICB7CisgICAgICAgICAgICBkaXN0YW5jZSA8PD0gbnVtRGlyZWN0Qml0czsKKyAgICAgICAgICAgIHByb2IgPSBwcm9icyArIFNwZWNQb3MgKyBkaXN0YW5jZSAtIHBvc1Nsb3QgLSAxOworICAgICAgICAgICAgeworICAgICAgICAgICAgICBVSW50MzIgbWFzayA9IDE7CisgICAgICAgICAgICAgIHVuc2lnbmVkIGkgPSAxOworICAgICAgICAgICAgICBkbworICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgR0VUX0JJVDIocHJvYiArIGksIGksIDsgLCBkaXN0YW5jZSB8PSBtYXNrKTsKKyAgICAgICAgICAgICAgICBtYXNrIDw8PSAxOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIHdoaWxlICgtLW51bURpcmVjdEJpdHMgIT0gMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgICBudW1EaXJlY3RCaXRzIC09IGtOdW1BbGlnbkJpdHM7CisgICAgICAgICAgICBkbworICAgICAgICAgICAgeworICAgICAgICAgICAgICBOT1JNQUxJWkUKKyAgICAgICAgICAgICAgcmFuZ2UgPj49IDE7CisKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFVJbnQzMiB0OworICAgICAgICAgICAgICAgIGNvZGUgLT0gcmFuZ2U7CisgICAgICAgICAgICAgICAgdCA9ICgwIC0gKChVSW50MzIpY29kZSA+PiAzMSkpOyAvKiAoVUludDMyKSgoSW50MzIpY29kZSA+PiAzMSkgKi8KKyAgICAgICAgICAgICAgICBkaXN0YW5jZSA9IChkaXN0YW5jZSA8PCAxKSArICh0ICsgMSk7CisgICAgICAgICAgICAgICAgY29kZSArPSByYW5nZSAmIHQ7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgZGlzdGFuY2UgPDw9IDE7CisgICAgICAgICAgICAgIGlmIChjb2RlID49IHJhbmdlKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29kZSAtPSByYW5nZTsKKyAgICAgICAgICAgICAgICBkaXN0YW5jZSB8PSAxOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aGlsZSAoLS1udW1EaXJlY3RCaXRzICE9IDApOworICAgICAgICAgICAgcHJvYiA9IHByb2JzICsgQWxpZ247CisgICAgICAgICAgICBkaXN0YW5jZSA8PD0ga051bUFsaWduQml0czsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgdW5zaWduZWQgaSA9IDE7CisgICAgICAgICAgICAgIEdFVF9CSVQyKHByb2IgKyBpLCBpLCA7ICwgZGlzdGFuY2UgfD0gMSk7CisgICAgICAgICAgICAgIEdFVF9CSVQyKHByb2IgKyBpLCBpLCA7ICwgZGlzdGFuY2UgfD0gMik7CisgICAgICAgICAgICAgIEdFVF9CSVQyKHByb2IgKyBpLCBpLCA7ICwgZGlzdGFuY2UgfD0gNCk7CisgICAgICAgICAgICAgIEdFVF9CSVQyKHByb2IgKyBpLCBpLCA7ICwgZGlzdGFuY2UgfD0gOCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZGlzdGFuY2UgPT0gKFVJbnQzMikweEZGRkZGRkZGKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBsZW4gKz0ga01hdGNoU3BlY0xlblN0YXJ0OworICAgICAgICAgICAgICBzdGF0ZSAtPSBrTnVtU3RhdGVzOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmVwMyA9IHJlcDI7CisgICAgICAgIHJlcDIgPSByZXAxOworICAgICAgICByZXAxID0gcmVwMDsKKyAgICAgICAgcmVwMCA9IGRpc3RhbmNlICsgMTsKKyAgICAgICAgaWYgKGNoZWNrRGljU2l6ZSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgaWYgKGRpc3RhbmNlID49IHByb2Nlc3NlZFBvcykKKyAgICAgICAgICAgIHJldHVybiBTWl9FUlJPUl9EQVRBOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGRpc3RhbmNlID49IGNoZWNrRGljU2l6ZSkKKyAgICAgICAgICByZXR1cm4gU1pfRVJST1JfREFUQTsKKyAgICAgICAgc3RhdGUgPSAoc3RhdGUgPCBrTnVtU3RhdGVzICsga051bUxpdFN0YXRlcykgPyBrTnVtTGl0U3RhdGVzIDoga051bUxpdFN0YXRlcyArIDM7CisgICAgICAgIC8qIHN0YXRlID0ga0xpdGVyYWxOZXh0U3RhdGVzW3N0YXRlXTsgKi8KKyAgICAgIH0KKworICAgICAgbGVuICs9IGtNYXRjaE1pbkxlbjsKKworICAgICAgaWYgKGxpbWl0ID09IGRpY1BvcykKKyAgICAgICAgcmV0dXJuIFNaX0VSUk9SX0RBVEE7CisgICAgICB7CisgICAgICAgIFNpemVUIHJlbSA9IGxpbWl0IC0gZGljUG9zOworICAgICAgICB1bnNpZ25lZCBjdXJMZW4gPSAoKHJlbSA8IGxlbikgPyAodW5zaWduZWQpcmVtIDogbGVuKTsKKyAgICAgICAgU2l6ZVQgcG9zID0gKGRpY1BvcyAtIHJlcDApICsgKChkaWNQb3MgPCByZXAwKSA/IGRpY0J1ZlNpemUgOiAwKTsKKworICAgICAgICBwcm9jZXNzZWRQb3MgKz0gY3VyTGVuOworCisgICAgICAgIGxlbiAtPSBjdXJMZW47CisgICAgICAgIGlmIChwb3MgKyBjdXJMZW4gPD0gZGljQnVmU2l6ZSkKKyAgICAgICAgeworICAgICAgICAgIEJ5dGUgKmRlc3QgPSBkaWMgKyBkaWNQb3M7CisgICAgICAgICAgcHRyZGlmZl90IHNyYyA9IChwdHJkaWZmX3QpcG9zIC0gKHB0cmRpZmZfdClkaWNQb3M7CisgICAgICAgICAgY29uc3QgQnl0ZSAqbGltID0gZGVzdCArIGN1ckxlbjsKKyAgICAgICAgICBkaWNQb3MgKz0gY3VyTGVuOworICAgICAgICAgIGRvCisgICAgICAgICAgICAqKGRlc3QpID0gKEJ5dGUpKihkZXN0ICsgc3JjKTsKKyAgICAgICAgICB3aGlsZSAoKytkZXN0ICE9IGxpbSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgZG8KKyAgICAgICAgICB7CisgICAgICAgICAgICBkaWNbZGljUG9zKytdID0gZGljW3Bvc107CisgICAgICAgICAgICBpZiAoKytwb3MgPT0gZGljQnVmU2l6ZSkKKyAgICAgICAgICAgICAgcG9zID0gMDsKKyAgICAgICAgICB9CisgICAgICAgICAgd2hpbGUgKC0tY3VyTGVuICE9IDApOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisgIHdoaWxlIChkaWNQb3MgPCBsaW1pdCAmJiBidWYgPCBidWZMaW1pdCk7CisgIE5PUk1BTElaRTsKKyAgcC0+YnVmID0gYnVmOworICBwLT5yYW5nZSA9IHJhbmdlOworICBwLT5jb2RlID0gY29kZTsKKyAgcC0+cmVtYWluTGVuID0gbGVuOworICBwLT5kaWNQb3MgPSBkaWNQb3M7CisgIHAtPnByb2Nlc3NlZFBvcyA9IHByb2Nlc3NlZFBvczsKKyAgcC0+cmVwc1swXSA9IHJlcDA7CisgIHAtPnJlcHNbMV0gPSByZXAxOworICBwLT5yZXBzWzJdID0gcmVwMjsKKyAgcC0+cmVwc1szXSA9IHJlcDM7CisgIHAtPnN0YXRlID0gc3RhdGU7CisKKyAgcmV0dXJuIFNaX09LOworfQorCitzdGF0aWMgdm9pZCBNWV9GQVNUX0NBTEwgTHptYURlY19Xcml0ZVJlbShDTHptYURlYyAqcCwgU2l6ZVQgbGltaXQpCit7CisgIGlmIChwLT5yZW1haW5MZW4gIT0gMCAmJiBwLT5yZW1haW5MZW4gPCBrTWF0Y2hTcGVjTGVuU3RhcnQpCisgIHsKKyAgICBCeXRlICpkaWMgPSBwLT5kaWM7CisgICAgU2l6ZVQgZGljUG9zID0gcC0+ZGljUG9zOworICAgIFNpemVUIGRpY0J1ZlNpemUgPSBwLT5kaWNCdWZTaXplOworICAgIHVuc2lnbmVkIGxlbiA9IHAtPnJlbWFpbkxlbjsKKyAgICBVSW50MzIgcmVwMCA9IHAtPnJlcHNbMF07CisgICAgaWYgKGxpbWl0IC0gZGljUG9zIDwgbGVuKQorICAgICAgbGVuID0gKHVuc2lnbmVkKShsaW1pdCAtIGRpY1Bvcyk7CisKKyAgICBpZiAocC0+Y2hlY2tEaWNTaXplID09IDAgJiYgcC0+cHJvcC5kaWNTaXplIC0gcC0+cHJvY2Vzc2VkUG9zIDw9IGxlbikKKyAgICAgIHAtPmNoZWNrRGljU2l6ZSA9IHAtPnByb3AuZGljU2l6ZTsKKworICAgIHAtPnByb2Nlc3NlZFBvcyArPSBsZW47CisgICAgcC0+cmVtYWluTGVuIC09IGxlbjsKKyAgICB3aGlsZSAobGVuLS0gIT0gMCkKKyAgICB7CisgICAgICBkaWNbZGljUG9zXSA9IGRpY1soZGljUG9zIC0gcmVwMCkgKyAoKGRpY1BvcyA8IHJlcDApID8gZGljQnVmU2l6ZSA6IDApXTsKKyAgICAgIGRpY1BvcysrOworICAgIH0KKyAgICBwLT5kaWNQb3MgPSBkaWNQb3M7CisgIH0KK30KKworc3RhdGljIGludCBNWV9GQVNUX0NBTEwgTHptYURlY19EZWNvZGVSZWFsMihDTHptYURlYyAqcCwgU2l6ZVQgbGltaXQsIGNvbnN0IEJ5dGUgKmJ1ZkxpbWl0KQoreworICBkbworICB7CisgICAgU2l6ZVQgbGltaXQyID0gbGltaXQ7CisgICAgaWYgKHAtPmNoZWNrRGljU2l6ZSA9PSAwKQorICAgIHsKKyAgICAgIFVJbnQzMiByZW0gPSBwLT5wcm9wLmRpY1NpemUgLSBwLT5wcm9jZXNzZWRQb3M7CisgICAgICBpZiAobGltaXQgLSBwLT5kaWNQb3MgPiByZW0pCisgICAgICAgIGxpbWl0MiA9IHAtPmRpY1BvcyArIHJlbTsKKyAgICB9CisgICAgUklOT0soTHptYURlY19EZWNvZGVSZWFsKHAsIGxpbWl0MiwgYnVmTGltaXQpKTsKKyAgICBpZiAocC0+cHJvY2Vzc2VkUG9zID49IHAtPnByb3AuZGljU2l6ZSkKKyAgICAgIHAtPmNoZWNrRGljU2l6ZSA9IHAtPnByb3AuZGljU2l6ZTsKKyAgICBMem1hRGVjX1dyaXRlUmVtKHAsIGxpbWl0KTsKKyAgfQorICB3aGlsZSAocC0+ZGljUG9zIDwgbGltaXQgJiYgcC0+YnVmIDwgYnVmTGltaXQgJiYgcC0+cmVtYWluTGVuIDwga01hdGNoU3BlY0xlblN0YXJ0KTsKKworICBpZiAocC0+cmVtYWluTGVuID4ga01hdGNoU3BlY0xlblN0YXJ0KQorICB7CisgICAgcC0+cmVtYWluTGVuID0ga01hdGNoU3BlY0xlblN0YXJ0OworICB9CisgIHJldHVybiAwOworfQorCit0eXBlZGVmIGVudW0KK3sKKyAgRFVNTVlfRVJST1IsIC8qIHVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0IHN0cmVhbSAqLworICBEVU1NWV9MSVQsCisgIERVTU1ZX01BVENILAorICBEVU1NWV9SRVAKK30gRUx6bWFEdW1teTsKKworc3RhdGljIEVMem1hRHVtbXkgTHptYURlY19UcnlEdW1teShjb25zdCBDTHptYURlYyAqcCwgY29uc3QgQnl0ZSAqYnVmLCBTaXplVCBpblNpemUpCit7CisgIFVJbnQzMiByYW5nZSA9IHAtPnJhbmdlOworICBVSW50MzIgY29kZSA9IHAtPmNvZGU7CisgIGNvbnN0IEJ5dGUgKmJ1ZkxpbWl0ID0gYnVmICsgaW5TaXplOworICBDTHptYVByb2IgKnByb2JzID0gcC0+cHJvYnM7CisgIHVuc2lnbmVkIHN0YXRlID0gcC0+c3RhdGU7CisgIEVMem1hRHVtbXkgcmVzOworCisgIHsKKyAgICBDTHptYVByb2IgKnByb2I7CisgICAgVUludDMyIGJvdW5kOworICAgIHVuc2lnbmVkIHR0dDsKKyAgICB1bnNpZ25lZCBwb3NTdGF0ZSA9IChwLT5wcm9jZXNzZWRQb3MpICYgKCgxIDw8IHAtPnByb3AucGIpIC0gMSk7CisKKyAgICBwcm9iID0gcHJvYnMgKyBJc01hdGNoICsgKHN0YXRlIDw8IGtOdW1Qb3NCaXRzTWF4KSArIHBvc1N0YXRlOworICAgIElGX0JJVF8wX0NIRUNLKHByb2IpCisgICAgeworICAgICAgVVBEQVRFXzBfQ0hFQ0sKKworICAgICAgLyogaWYgKGJ1ZkxpbWl0IC0gYnVmID49IDcpIHJldHVybiBEVU1NWV9MSVQ7ICovCisKKyAgICAgIHByb2IgPSBwcm9icyArIExpdGVyYWw7CisgICAgICBpZiAocC0+Y2hlY2tEaWNTaXplICE9IDAgfHwgcC0+cHJvY2Vzc2VkUG9zICE9IDApCisgICAgICAgIHByb2IgKz0gKExaTUFfTElUX1NJWkUgKgorICAgICAgICAgICgoKChwLT5wcm9jZXNzZWRQb3MpICYgKCgxIDw8IChwLT5wcm9wLmxwKSkgLSAxKSkgPDwgcC0+cHJvcC5sYykgKworICAgICAgICAgIChwLT5kaWNbKHAtPmRpY1BvcyA9PSAwID8gcC0+ZGljQnVmU2l6ZSA6IHAtPmRpY1BvcykgLSAxXSA+PiAoOCAtIHAtPnByb3AubGMpKSkpOworCisgICAgICBpZiAoc3RhdGUgPCBrTnVtTGl0U3RhdGVzKQorICAgICAgeworICAgICAgICB1bnNpZ25lZCBzeW1ib2wgPSAxOworICAgICAgICBkbyB7IEdFVF9CSVRfQ0hFQ0socHJvYiArIHN5bWJvbCwgc3ltYm9sKSB9IHdoaWxlIChzeW1ib2wgPCAweDEwMCk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIHVuc2lnbmVkIG1hdGNoQnl0ZSA9IHAtPmRpY1twLT5kaWNQb3MgLSBwLT5yZXBzWzBdICsKKyAgICAgICAgICAgICgocC0+ZGljUG9zIDwgcC0+cmVwc1swXSkgPyBwLT5kaWNCdWZTaXplIDogMCldOworICAgICAgICB1bnNpZ25lZCBvZmZzID0gMHgxMDA7CisgICAgICAgIHVuc2lnbmVkIHN5bWJvbCA9IDE7CisgICAgICAgIGRvCisgICAgICAgIHsKKyAgICAgICAgICB1bnNpZ25lZCBiaXQ7CisgICAgICAgICAgQ0x6bWFQcm9iICpwcm9iTGl0OworICAgICAgICAgIG1hdGNoQnl0ZSA8PD0gMTsKKyAgICAgICAgICBiaXQgPSAobWF0Y2hCeXRlICYgb2Zmcyk7CisgICAgICAgICAgcHJvYkxpdCA9IHByb2IgKyBvZmZzICsgYml0ICsgc3ltYm9sOworICAgICAgICAgIEdFVF9CSVQyX0NIRUNLKHByb2JMaXQsIHN5bWJvbCwgb2ZmcyAmPSB+Yml0LCBvZmZzICY9IGJpdCkKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAoc3ltYm9sIDwgMHgxMDApOworICAgICAgfQorICAgICAgcmVzID0gRFVNTVlfTElUOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgdW5zaWduZWQgbGVuOworICAgICAgVVBEQVRFXzFfQ0hFQ0s7CisKKyAgICAgIHByb2IgPSBwcm9icyArIElzUmVwICsgc3RhdGU7CisgICAgICBJRl9CSVRfMF9DSEVDSyhwcm9iKQorICAgICAgeworICAgICAgICBVUERBVEVfMF9DSEVDSzsKKyAgICAgICAgc3RhdGUgPSAwOworICAgICAgICBwcm9iID0gcHJvYnMgKyBMZW5Db2RlcjsKKyAgICAgICAgcmVzID0gRFVNTVlfTUFUQ0g7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIFVQREFURV8xX0NIRUNLOworICAgICAgICByZXMgPSBEVU1NWV9SRVA7CisgICAgICAgIHByb2IgPSBwcm9icyArIElzUmVwRzAgKyBzdGF0ZTsKKyAgICAgICAgSUZfQklUXzBfQ0hFQ0socHJvYikKKyAgICAgICAgeworICAgICAgICAgIFVQREFURV8wX0NIRUNLOworICAgICAgICAgIHByb2IgPSBwcm9icyArIElzUmVwMExvbmcgKyAoc3RhdGUgPDwga051bVBvc0JpdHNNYXgpICsgcG9zU3RhdGU7CisgICAgICAgICAgSUZfQklUXzBfQ0hFQ0socHJvYikKKyAgICAgICAgICB7CisgICAgICAgICAgICBVUERBVEVfMF9DSEVDSzsKKyAgICAgICAgICAgIE5PUk1BTElaRV9DSEVDSzsKKyAgICAgICAgICAgIHJldHVybiBEVU1NWV9SRVA7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgICBVUERBVEVfMV9DSEVDSzsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgVVBEQVRFXzFfQ0hFQ0s7CisgICAgICAgICAgcHJvYiA9IHByb2JzICsgSXNSZXBHMSArIHN0YXRlOworICAgICAgICAgIElGX0JJVF8wX0NIRUNLKHByb2IpCisgICAgICAgICAgeworICAgICAgICAgICAgVVBEQVRFXzBfQ0hFQ0s7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgICBVUERBVEVfMV9DSEVDSzsKKyAgICAgICAgICAgIHByb2IgPSBwcm9icyArIElzUmVwRzIgKyBzdGF0ZTsKKyAgICAgICAgICAgIElGX0JJVF8wX0NIRUNLKHByb2IpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIFVQREFURV8wX0NIRUNLOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBVUERBVEVfMV9DSEVDSzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc3RhdGUgPSBrTnVtU3RhdGVzOworICAgICAgICBwcm9iID0gcHJvYnMgKyBSZXBMZW5Db2RlcjsKKyAgICAgIH0KKyAgICAgIHsKKyAgICAgICAgdW5zaWduZWQgbGltaXQsIG9mZnNldDsKKyAgICAgICAgQ0x6bWFQcm9iICpwcm9iTGVuID0gcHJvYiArIExlbkNob2ljZTsKKyAgICAgICAgSUZfQklUXzBfQ0hFQ0socHJvYkxlbikKKyAgICAgICAgeworICAgICAgICAgIFVQREFURV8wX0NIRUNLOworICAgICAgICAgIHByb2JMZW4gPSBwcm9iICsgTGVuTG93ICsgKHBvc1N0YXRlIDw8IGtMZW5OdW1Mb3dCaXRzKTsKKyAgICAgICAgICBvZmZzZXQgPSAwOworICAgICAgICAgIGxpbWl0ID0gMSA8PCBrTGVuTnVtTG93Qml0czsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBVUERBVEVfMV9DSEVDSzsKKyAgICAgICAgICBwcm9iTGVuID0gcHJvYiArIExlbkNob2ljZTI7CisgICAgICAgICAgSUZfQklUXzBfQ0hFQ0socHJvYkxlbikKKyAgICAgICAgICB7CisgICAgICAgICAgICBVUERBVEVfMF9DSEVDSzsKKyAgICAgICAgICAgIHByb2JMZW4gPSBwcm9iICsgTGVuTWlkICsgKHBvc1N0YXRlIDw8IGtMZW5OdW1NaWRCaXRzKTsKKyAgICAgICAgICAgIG9mZnNldCA9IGtMZW5OdW1Mb3dTeW1ib2xzOworICAgICAgICAgICAgbGltaXQgPSAxIDw8IGtMZW5OdW1NaWRCaXRzOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgVVBEQVRFXzFfQ0hFQ0s7CisgICAgICAgICAgICBwcm9iTGVuID0gcHJvYiArIExlbkhpZ2g7CisgICAgICAgICAgICBvZmZzZXQgPSBrTGVuTnVtTG93U3ltYm9scyArIGtMZW5OdW1NaWRTeW1ib2xzOworICAgICAgICAgICAgbGltaXQgPSAxIDw8IGtMZW5OdW1IaWdoQml0czsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgVFJFRV9ERUNPREVfQ0hFQ0socHJvYkxlbiwgbGltaXQsIGxlbik7CisgICAgICAgIGxlbiArPSBvZmZzZXQ7CisgICAgICB9CisKKyAgICAgIGlmIChzdGF0ZSA8IDQpCisgICAgICB7CisgICAgICAgIHVuc2lnbmVkIHBvc1Nsb3Q7CisgICAgICAgIHByb2IgPSBwcm9icyArIFBvc1Nsb3QgKworICAgICAgICAgICAgKChsZW4gPCBrTnVtTGVuVG9Qb3NTdGF0ZXMgPyBsZW4gOiBrTnVtTGVuVG9Qb3NTdGF0ZXMgLSAxKSA8PAorICAgICAgICAgICAga051bVBvc1Nsb3RCaXRzKTsKKyAgICAgICAgVFJFRV9ERUNPREVfQ0hFQ0socHJvYiwgMSA8PCBrTnVtUG9zU2xvdEJpdHMsIHBvc1Nsb3QpOworICAgICAgICBpZiAocG9zU2xvdCA+PSBrU3RhcnRQb3NNb2RlbEluZGV4KQorICAgICAgICB7CisgICAgICAgICAgaW50IG51bURpcmVjdEJpdHMgPSAoKHBvc1Nsb3QgPj4gMSkgLSAxKTsKKworICAgICAgICAgIC8qIGlmIChidWZMaW1pdCAtIGJ1ZiA+PSA4KSByZXR1cm4gRFVNTVlfTUFUQ0g7ICovCisKKyAgICAgICAgICBpZiAocG9zU2xvdCA8IGtFbmRQb3NNb2RlbEluZGV4KQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHByb2IgPSBwcm9icyArIFNwZWNQb3MgKyAoKDIgfCAocG9zU2xvdCAmIDEpKSA8PCBudW1EaXJlY3RCaXRzKSAtIHBvc1Nsb3QgLSAxOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgbnVtRGlyZWN0Qml0cyAtPSBrTnVtQWxpZ25CaXRzOworICAgICAgICAgICAgZG8KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgTk9STUFMSVpFX0NIRUNLCisgICAgICAgICAgICAgIHJhbmdlID4+PSAxOworICAgICAgICAgICAgICBjb2RlIC09IHJhbmdlICYgKCgoY29kZSAtIHJhbmdlKSA+PiAzMSkgLSAxKTsKKyAgICAgICAgICAgICAgLyogaWYgKGNvZGUgPj0gcmFuZ2UpIGNvZGUgLT0gcmFuZ2U7ICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aGlsZSAoLS1udW1EaXJlY3RCaXRzICE9IDApOworICAgICAgICAgICAgcHJvYiA9IHByb2JzICsgQWxpZ247CisgICAgICAgICAgICBudW1EaXJlY3RCaXRzID0ga051bUFsaWduQml0czsKKyAgICAgICAgICB9CisgICAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgaSA9IDE7CisgICAgICAgICAgICBkbworICAgICAgICAgICAgeworICAgICAgICAgICAgICBHRVRfQklUX0NIRUNLKHByb2IgKyBpLCBpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdoaWxlICgtLW51bURpcmVjdEJpdHMgIT0gMCk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisgIE5PUk1BTElaRV9DSEVDSzsKKyAgcmV0dXJuIHJlczsKK30KKworCitzdGF0aWMgdm9pZCBMem1hRGVjX0luaXRSYyhDTHptYURlYyAqcCwgY29uc3QgQnl0ZSAqZGF0YSkKK3sKKyAgcC0+Y29kZSA9ICgoVUludDMyKWRhdGFbMV0gPDwgMjQpIHwgKChVSW50MzIpZGF0YVsyXSA8PCAxNikgfCAoKFVJbnQzMilkYXRhWzNdIDw8IDgpIHwgKChVSW50MzIpZGF0YVs0XSk7CisgIHAtPnJhbmdlID0gMHhGRkZGRkZGRjsKKyAgcC0+bmVlZEZsdXNoID0gMDsKK30KKwordm9pZCBMem1hRGVjX0luaXREaWNBbmRTdGF0ZShDTHptYURlYyAqcCwgQm9vbCBpbml0RGljLCBCb29sIGluaXRTdGF0ZSkKK3sKKyAgcC0+bmVlZEZsdXNoID0gMTsKKyAgcC0+cmVtYWluTGVuID0gMDsKKyAgcC0+dGVtcEJ1ZlNpemUgPSAwOworCisgIGlmIChpbml0RGljKQorICB7CisgICAgcC0+cHJvY2Vzc2VkUG9zID0gMDsKKyAgICBwLT5jaGVja0RpY1NpemUgPSAwOworICAgIHAtPm5lZWRJbml0U3RhdGUgPSAxOworICB9CisgIGlmIChpbml0U3RhdGUpCisgICAgcC0+bmVlZEluaXRTdGF0ZSA9IDE7Cit9CisKK3ZvaWQgTHptYURlY19Jbml0KENMem1hRGVjICpwKQoreworICBwLT5kaWNQb3MgPSAwOworICBMem1hRGVjX0luaXREaWNBbmRTdGF0ZShwLCBUcnVlLCBUcnVlKTsKK30KKworc3RhdGljIHZvaWQgTHptYURlY19Jbml0U3RhdGVSZWFsKENMem1hRGVjICpwKQoreworICBVSW50MzIgbnVtUHJvYnMgPSBMaXRlcmFsICsgKChVSW50MzIpTFpNQV9MSVRfU0laRSA8PCAocC0+cHJvcC5sYyArIHAtPnByb3AubHApKTsKKyAgVUludDMyIGk7CisgIENMem1hUHJvYiAqcHJvYnMgPSBwLT5wcm9iczsKKyAgZm9yIChpID0gMDsgaSA8IG51bVByb2JzOyBpKyspCisgICAgcHJvYnNbaV0gPSBrQml0TW9kZWxUb3RhbCA+PiAxOworICBwLT5yZXBzWzBdID0gcC0+cmVwc1sxXSA9IHAtPnJlcHNbMl0gPSBwLT5yZXBzWzNdID0gMTsKKyAgcC0+c3RhdGUgPSAwOworICBwLT5uZWVkSW5pdFN0YXRlID0gMDsKK30KKworU1JlcyBMem1hRGVjX0RlY29kZVRvRGljKENMem1hRGVjICpwLCBTaXplVCBkaWNMaW1pdCwgY29uc3QgQnl0ZSAqc3JjLCBTaXplVCAqc3JjTGVuLAorICAgIEVMem1hRmluaXNoTW9kZSBmaW5pc2hNb2RlLCBFTHptYVN0YXR1cyAqc3RhdHVzKQoreworICBTaXplVCBpblNpemUgPSAqc3JjTGVuOworICAoKnNyY0xlbikgPSAwOworICBMem1hRGVjX1dyaXRlUmVtKHAsIGRpY0xpbWl0KTsKKworICAqc3RhdHVzID0gTFpNQV9TVEFUVVNfTk9UX1NQRUNJRklFRDsKKworICB3aGlsZSAocC0+cmVtYWluTGVuICE9IGtNYXRjaFNwZWNMZW5TdGFydCkKKyAgeworICAgICAgaW50IGNoZWNrRW5kTWFya05vdzsKKworICAgICAgaWYgKHAtPm5lZWRGbHVzaCAhPSAwKQorICAgICAgeworICAgICAgICBmb3IgKDsgaW5TaXplID4gMCAmJiBwLT50ZW1wQnVmU2l6ZSA8IFJDX0lOSVRfU0laRTsgKCpzcmNMZW4pKyssIGluU2l6ZS0tKQorICAgICAgICAgIHAtPnRlbXBCdWZbcC0+dGVtcEJ1ZlNpemUrK10gPSAqc3JjKys7CisgICAgICAgIGlmIChwLT50ZW1wQnVmU2l6ZSA8IFJDX0lOSVRfU0laRSkKKyAgICAgICAgeworICAgICAgICAgICpzdGF0dXMgPSBMWk1BX1NUQVRVU19ORUVEU19NT1JFX0lOUFVUOworICAgICAgICAgIHJldHVybiBTWl9PSzsKKyAgICAgICAgfQorICAgICAgICBpZiAocC0+dGVtcEJ1ZlswXSAhPSAwKQorICAgICAgICAgIHJldHVybiBTWl9FUlJPUl9EQVRBOworCisgICAgICAgIEx6bWFEZWNfSW5pdFJjKHAsIHAtPnRlbXBCdWYpOworICAgICAgICBwLT50ZW1wQnVmU2l6ZSA9IDA7CisgICAgICB9CisKKyAgICAgIGNoZWNrRW5kTWFya05vdyA9IDA7CisgICAgICBpZiAocC0+ZGljUG9zID49IGRpY0xpbWl0KQorICAgICAgeworICAgICAgICBpZiAocC0+cmVtYWluTGVuID09IDAgJiYgcC0+Y29kZSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgKnN0YXR1cyA9IExaTUFfU1RBVFVTX01BWUJFX0ZJTklTSEVEX1dJVEhPVVRfTUFSSzsKKyAgICAgICAgICByZXR1cm4gU1pfT0s7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZpbmlzaE1vZGUgPT0gTFpNQV9GSU5JU0hfQU5ZKQorICAgICAgICB7CisgICAgICAgICAgKnN0YXR1cyA9IExaTUFfU1RBVFVTX05PVF9GSU5JU0hFRDsKKyAgICAgICAgICByZXR1cm4gU1pfT0s7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHAtPnJlbWFpbkxlbiAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgKnN0YXR1cyA9IExaTUFfU1RBVFVTX05PVF9GSU5JU0hFRDsKKyAgICAgICAgICByZXR1cm4gU1pfRVJST1JfREFUQTsKKyAgICAgICAgfQorICAgICAgICBjaGVja0VuZE1hcmtOb3cgPSAxOworICAgICAgfQorCisgICAgICBpZiAocC0+bmVlZEluaXRTdGF0ZSkKKyAgICAgICAgTHptYURlY19Jbml0U3RhdGVSZWFsKHApOworCisgICAgICBpZiAocC0+dGVtcEJ1ZlNpemUgPT0gMCkKKyAgICAgIHsKKyAgICAgICAgU2l6ZVQgcHJvY2Vzc2VkOworICAgICAgICBjb25zdCBCeXRlICpidWZMaW1pdDsKKyAgICAgICAgaWYgKGluU2l6ZSA8IExaTUFfUkVRVUlSRURfSU5QVVRfTUFYIHx8IGNoZWNrRW5kTWFya05vdykKKyAgICAgICAgeworICAgICAgICAgIGludCBkdW1teVJlcyA9IEx6bWFEZWNfVHJ5RHVtbXkocCwgc3JjLCBpblNpemUpOworICAgICAgICAgIGlmIChkdW1teVJlcyA9PSBEVU1NWV9FUlJPUikKKyAgICAgICAgICB7CisgICAgICAgICAgICBtZW1jcHkocC0+dGVtcEJ1Ziwgc3JjLCBpblNpemUpOworICAgICAgICAgICAgcC0+dGVtcEJ1ZlNpemUgPSAodW5zaWduZWQpaW5TaXplOworICAgICAgICAgICAgKCpzcmNMZW4pICs9IGluU2l6ZTsKKyAgICAgICAgICAgICpzdGF0dXMgPSBMWk1BX1NUQVRVU19ORUVEU19NT1JFX0lOUFVUOworICAgICAgICAgICAgcmV0dXJuIFNaX09LOworICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoY2hlY2tFbmRNYXJrTm93ICYmIGR1bW15UmVzICE9IERVTU1ZX01BVENIKQorICAgICAgICAgIHsKKyAgICAgICAgICAgICpzdGF0dXMgPSBMWk1BX1NUQVRVU19OT1RfRklOSVNIRUQ7CisgICAgICAgICAgICByZXR1cm4gU1pfRVJST1JfREFUQTsKKyAgICAgICAgICB9CisgICAgICAgICAgYnVmTGltaXQgPSBzcmM7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIGJ1ZkxpbWl0ID0gc3JjICsgaW5TaXplIC0gTFpNQV9SRVFVSVJFRF9JTlBVVF9NQVg7CisgICAgICAgIHAtPmJ1ZiA9IHNyYzsKKyAgICAgICAgaWYgKEx6bWFEZWNfRGVjb2RlUmVhbDIocCwgZGljTGltaXQsIGJ1ZkxpbWl0KSAhPSAwKQorICAgICAgICAgIHJldHVybiBTWl9FUlJPUl9EQVRBOworICAgICAgICBwcm9jZXNzZWQgPSAoU2l6ZVQpKHAtPmJ1ZiAtIHNyYyk7CisgICAgICAgICgqc3JjTGVuKSArPSBwcm9jZXNzZWQ7CisgICAgICAgIHNyYyArPSBwcm9jZXNzZWQ7CisgICAgICAgIGluU2l6ZSAtPSBwcm9jZXNzZWQ7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlbSA9IHAtPnRlbXBCdWZTaXplLCBsb29rQWhlYWQgPSAwOworICAgICAgICB3aGlsZSAocmVtIDwgTFpNQV9SRVFVSVJFRF9JTlBVVF9NQVggJiYgbG9va0FoZWFkIDwgaW5TaXplKQorICAgICAgICAgIHAtPnRlbXBCdWZbcmVtKytdID0gc3JjW2xvb2tBaGVhZCsrXTsKKyAgICAgICAgcC0+dGVtcEJ1ZlNpemUgPSByZW07CisgICAgICAgIGlmIChyZW0gPCBMWk1BX1JFUVVJUkVEX0lOUFVUX01BWCB8fCBjaGVja0VuZE1hcmtOb3cpCisgICAgICAgIHsKKyAgICAgICAgICBpbnQgZHVtbXlSZXMgPSBMem1hRGVjX1RyeUR1bW15KHAsIHAtPnRlbXBCdWYsIHJlbSk7CisgICAgICAgICAgaWYgKGR1bW15UmVzID09IERVTU1ZX0VSUk9SKQorICAgICAgICAgIHsKKyAgICAgICAgICAgICgqc3JjTGVuKSArPSBsb29rQWhlYWQ7CisgICAgICAgICAgICAqc3RhdHVzID0gTFpNQV9TVEFUVVNfTkVFRFNfTU9SRV9JTlBVVDsKKyAgICAgICAgICAgIHJldHVybiBTWl9PSzsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKGNoZWNrRW5kTWFya05vdyAmJiBkdW1teVJlcyAhPSBEVU1NWV9NQVRDSCkKKyAgICAgICAgICB7CisgICAgICAgICAgICAqc3RhdHVzID0gTFpNQV9TVEFUVVNfTk9UX0ZJTklTSEVEOworICAgICAgICAgICAgcmV0dXJuIFNaX0VSUk9SX0RBVEE7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHAtPmJ1ZiA9IHAtPnRlbXBCdWY7CisgICAgICAgIGlmIChMem1hRGVjX0RlY29kZVJlYWwyKHAsIGRpY0xpbWl0LCBwLT5idWYpICE9IDApCisgICAgICAgICAgcmV0dXJuIFNaX0VSUk9SX0RBVEE7CisgICAgICAgIGxvb2tBaGVhZCAtPSAocmVtIC0gKHVuc2lnbmVkKShwLT5idWYgLSBwLT50ZW1wQnVmKSk7CisgICAgICAgICgqc3JjTGVuKSArPSBsb29rQWhlYWQ7CisgICAgICAgIHNyYyArPSBsb29rQWhlYWQ7CisgICAgICAgIGluU2l6ZSAtPSBsb29rQWhlYWQ7CisgICAgICAgIHAtPnRlbXBCdWZTaXplID0gMDsKKyAgICAgIH0KKyAgfQorICBpZiAocC0+Y29kZSA9PSAwKQorICAgICpzdGF0dXMgPSBMWk1BX1NUQVRVU19GSU5JU0hFRF9XSVRIX01BUks7CisgIHJldHVybiAocC0+Y29kZSA9PSAwKSA/IFNaX09LIDogU1pfRVJST1JfREFUQTsKK30KKworU1JlcyBMem1hRGVjX0RlY29kZVRvQnVmKENMem1hRGVjICpwLCBCeXRlICpkZXN0LCBTaXplVCAqZGVzdExlbiwgY29uc3QgQnl0ZSAqc3JjLCBTaXplVCAqc3JjTGVuLCBFTHptYUZpbmlzaE1vZGUgZmluaXNoTW9kZSwgRUx6bWFTdGF0dXMgKnN0YXR1cykKK3sKKyAgU2l6ZVQgb3V0U2l6ZSA9ICpkZXN0TGVuOworICBTaXplVCBpblNpemUgPSAqc3JjTGVuOworICAqc3JjTGVuID0gKmRlc3RMZW4gPSAwOworICBmb3IgKDs7KQorICB7CisgICAgU2l6ZVQgaW5TaXplQ3VyID0gaW5TaXplLCBvdXRTaXplQ3VyLCBkaWNQb3M7CisgICAgRUx6bWFGaW5pc2hNb2RlIGN1ckZpbmlzaE1vZGU7CisgICAgU1JlcyByZXM7CisgICAgaWYgKHAtPmRpY1BvcyA9PSBwLT5kaWNCdWZTaXplKQorICAgICAgcC0+ZGljUG9zID0gMDsKKyAgICBkaWNQb3MgPSBwLT5kaWNQb3M7CisgICAgaWYgKG91dFNpemUgPiBwLT5kaWNCdWZTaXplIC0gZGljUG9zKQorICAgIHsKKyAgICAgIG91dFNpemVDdXIgPSBwLT5kaWNCdWZTaXplOworICAgICAgY3VyRmluaXNoTW9kZSA9IExaTUFfRklOSVNIX0FOWTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIG91dFNpemVDdXIgPSBkaWNQb3MgKyBvdXRTaXplOworICAgICAgY3VyRmluaXNoTW9kZSA9IGZpbmlzaE1vZGU7CisgICAgfQorCisgICAgcmVzID0gTHptYURlY19EZWNvZGVUb0RpYyhwLCBvdXRTaXplQ3VyLCBzcmMsICZpblNpemVDdXIsIGN1ckZpbmlzaE1vZGUsIHN0YXR1cyk7CisgICAgc3JjICs9IGluU2l6ZUN1cjsKKyAgICBpblNpemUgLT0gaW5TaXplQ3VyOworICAgICpzcmNMZW4gKz0gaW5TaXplQ3VyOworICAgIG91dFNpemVDdXIgPSBwLT5kaWNQb3MgLSBkaWNQb3M7CisgICAgbWVtY3B5KGRlc3QsIHAtPmRpYyArIGRpY1Bvcywgb3V0U2l6ZUN1cik7CisgICAgZGVzdCArPSBvdXRTaXplQ3VyOworICAgIG91dFNpemUgLT0gb3V0U2l6ZUN1cjsKKyAgICAqZGVzdExlbiArPSBvdXRTaXplQ3VyOworICAgIGlmIChyZXMgIT0gMCkKKyAgICAgIHJldHVybiByZXM7CisgICAgaWYgKG91dFNpemVDdXIgPT0gMCB8fCBvdXRTaXplID09IDApCisgICAgICByZXR1cm4gU1pfT0s7CisgIH0KK30KKwordm9pZCBMem1hRGVjX0ZyZWVQcm9icyhDTHptYURlYyAqcCwgSVN6QWxsb2MgKmFsbG9jKQoreworICBhbGxvYy0+RnJlZShhbGxvYywgcC0+cHJvYnMpOworICBwLT5wcm9icyA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIEx6bWFEZWNfRnJlZURpY3QoQ0x6bWFEZWMgKnAsIElTekFsbG9jICphbGxvYykKK3sKKyAgYWxsb2MtPkZyZWUoYWxsb2MsIHAtPmRpYyk7CisgIHAtPmRpYyA9IDA7Cit9CisKK3ZvaWQgTHptYURlY19GcmVlKENMem1hRGVjICpwLCBJU3pBbGxvYyAqYWxsb2MpCit7CisgIEx6bWFEZWNfRnJlZVByb2JzKHAsIGFsbG9jKTsKKyAgTHptYURlY19GcmVlRGljdChwLCBhbGxvYyk7Cit9CisKK1NSZXMgTHptYVByb3BzX0RlY29kZShDTHptYVByb3BzICpwLCBjb25zdCBCeXRlICpkYXRhLCB1bnNpZ25lZCBzaXplKQoreworICBVSW50MzIgZGljU2l6ZTsKKyAgQnl0ZSBkOworCisgIGlmIChzaXplIDwgTFpNQV9QUk9QU19TSVpFKQorICAgIHJldHVybiBTWl9FUlJPUl9VTlNVUFBPUlRFRDsKKyAgZWxzZQorICAgIGRpY1NpemUgPSBkYXRhWzFdIHwgKChVSW50MzIpZGF0YVsyXSA8PCA4KSB8ICgoVUludDMyKWRhdGFbM10gPDwgMTYpIHwgKChVSW50MzIpZGF0YVs0XSA8PCAyNCk7CisKKyAgaWYgKGRpY1NpemUgPCBMWk1BX0RJQ19NSU4pCisgICAgZGljU2l6ZSA9IExaTUFfRElDX01JTjsKKyAgcC0+ZGljU2l6ZSA9IGRpY1NpemU7CisKKyAgZCA9IGRhdGFbMF07CisgIGlmIChkID49ICg5ICogNSAqIDUpKQorICAgIHJldHVybiBTWl9FUlJPUl9VTlNVUFBPUlRFRDsKKworICBwLT5sYyA9IGQgJSA5OworICBkIC89IDk7CisgIHAtPnBiID0gZCAvIDU7CisgIHAtPmxwID0gZCAlIDU7CisKKyAgcmV0dXJuIFNaX09LOworfQorCitzdGF0aWMgU1JlcyBMem1hRGVjX0FsbG9jYXRlUHJvYnMyKENMem1hRGVjICpwLCBjb25zdCBDTHptYVByb3BzICpwcm9wTmV3LCBJU3pBbGxvYyAqYWxsb2MpCit7CisgIFVJbnQzMiBudW1Qcm9icyA9IEx6bWFQcm9wc19HZXROdW1Qcm9icyhwcm9wTmV3KTsKKyAgaWYgKHAtPnByb2JzID09IDAgfHwgbnVtUHJvYnMgIT0gcC0+bnVtUHJvYnMpCisgIHsKKyAgICBMem1hRGVjX0ZyZWVQcm9icyhwLCBhbGxvYyk7CisgICAgcC0+cHJvYnMgPSAoQ0x6bWFQcm9iICopYWxsb2MtPkFsbG9jKGFsbG9jLCBudW1Qcm9icyAqIHNpemVvZihDTHptYVByb2IpKTsKKyAgICBwLT5udW1Qcm9icyA9IG51bVByb2JzOworICAgIGlmIChwLT5wcm9icyA9PSAwKQorICAgICAgcmV0dXJuIFNaX0VSUk9SX01FTTsKKyAgfQorICByZXR1cm4gU1pfT0s7Cit9CisKK1NSZXMgTHptYURlY19BbGxvY2F0ZVByb2JzKENMem1hRGVjICpwLCBjb25zdCBCeXRlICpwcm9wcywgdW5zaWduZWQgcHJvcHNTaXplLCBJU3pBbGxvYyAqYWxsb2MpCit7CisgIENMem1hUHJvcHMgcHJvcE5ldzsKKyAgUklOT0soTHptYVByb3BzX0RlY29kZSgmcHJvcE5ldywgcHJvcHMsIHByb3BzU2l6ZSkpOworICBSSU5PSyhMem1hRGVjX0FsbG9jYXRlUHJvYnMyKHAsICZwcm9wTmV3LCBhbGxvYykpOworICBwLT5wcm9wID0gcHJvcE5ldzsKKyAgcmV0dXJuIFNaX09LOworfQorCitTUmVzIEx6bWFEZWNfQWxsb2NhdGUoQ0x6bWFEZWMgKnAsIGNvbnN0IEJ5dGUgKnByb3BzLCB1bnNpZ25lZCBwcm9wc1NpemUsIElTekFsbG9jICphbGxvYykKK3sKKyAgQ0x6bWFQcm9wcyBwcm9wTmV3OworICBTaXplVCBkaWNCdWZTaXplOworICBSSU5PSyhMem1hUHJvcHNfRGVjb2RlKCZwcm9wTmV3LCBwcm9wcywgcHJvcHNTaXplKSk7CisgIFJJTk9LKEx6bWFEZWNfQWxsb2NhdGVQcm9iczIocCwgJnByb3BOZXcsIGFsbG9jKSk7CisgIGRpY0J1ZlNpemUgPSBwcm9wTmV3LmRpY1NpemU7CisgIGlmIChwLT5kaWMgPT0gMCB8fCBkaWNCdWZTaXplICE9IHAtPmRpY0J1ZlNpemUpCisgIHsKKyAgICBMem1hRGVjX0ZyZWVEaWN0KHAsIGFsbG9jKTsKKyAgICBwLT5kaWMgPSAoQnl0ZSAqKWFsbG9jLT5BbGxvYyhhbGxvYywgZGljQnVmU2l6ZSk7CisgICAgaWYgKHAtPmRpYyA9PSAwKQorICAgIHsKKyAgICAgIEx6bWFEZWNfRnJlZVByb2JzKHAsIGFsbG9jKTsKKyAgICAgIHJldHVybiBTWl9FUlJPUl9NRU07CisgICAgfQorICB9CisgIHAtPmRpY0J1ZlNpemUgPSBkaWNCdWZTaXplOworICBwLT5wcm9wID0gcHJvcE5ldzsKKyAgcmV0dXJuIFNaX09LOworfQorCitTUmVzIEx6bWFEZWNvZGUoQnl0ZSAqZGVzdCwgU2l6ZVQgKmRlc3RMZW4sIGNvbnN0IEJ5dGUgKnNyYywgU2l6ZVQgKnNyY0xlbiwKKyAgICBjb25zdCBCeXRlICpwcm9wRGF0YSwgdW5zaWduZWQgcHJvcFNpemUsIEVMem1hRmluaXNoTW9kZSBmaW5pc2hNb2RlLAorICAgIEVMem1hU3RhdHVzICpzdGF0dXMsIElTekFsbG9jICphbGxvYykKK3sKKyAgQ0x6bWFEZWMgcDsKKyAgU1JlcyByZXM7CisgIFNpemVUIGluU2l6ZSA9ICpzcmNMZW47CisgIFNpemVUIG91dFNpemUgPSAqZGVzdExlbjsKKyAgKnNyY0xlbiA9ICpkZXN0TGVuID0gMDsKKyAgaWYgKGluU2l6ZSA8IFJDX0lOSVRfU0laRSkKKyAgICByZXR1cm4gU1pfRVJST1JfSU5QVVRfRU9GOworCisgIEx6bWFEZWNfQ29uc3RydWN0KCZwKTsKKyAgcmVzID0gTHptYURlY19BbGxvY2F0ZVByb2JzKCZwLCBwcm9wRGF0YSwgcHJvcFNpemUsIGFsbG9jKTsKKyAgaWYgKHJlcyAhPSAwKQorICAgIHJldHVybiByZXM7CisgIHAuZGljID0gZGVzdDsKKyAgcC5kaWNCdWZTaXplID0gb3V0U2l6ZTsKKworICBMem1hRGVjX0luaXQoJnApOworCisgICpzcmNMZW4gPSBpblNpemU7CisgIHJlcyA9IEx6bWFEZWNfRGVjb2RlVG9EaWMoJnAsIG91dFNpemUsIHNyYywgc3JjTGVuLCBmaW5pc2hNb2RlLCBzdGF0dXMpOworCisgIGlmIChyZXMgPT0gU1pfT0sgJiYgKnN0YXR1cyA9PSBMWk1BX1NUQVRVU19ORUVEU19NT1JFX0lOUFVUKQorICAgIHJlcyA9IFNaX0VSUk9SX0lOUFVUX0VPRjsKKworICAoKmRlc3RMZW4pID0gcC5kaWNQb3M7CisgIEx6bWFEZWNfRnJlZVByb2JzKCZwLCBhbGxvYyk7CisgIHJldHVybiByZXM7Cit9CmRpZmYgLS1naXQgYS9saWJfZ2VuZXJpYy9sem1hL0x6bWFEZWMuaCBiL2xpYl9nZW5lcmljL2x6bWEvTHptYURlYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmYmE4N2YKLS0tIC9kZXYvbnVsbAorKysgYi9saWJfZ2VuZXJpYy9sem1hL0x6bWFEZWMuaApAQCAtMCwwICsxLDIyMyBAQAorLyogTHptYURlYy5oIC0tIExaTUEgRGVjb2RlcgorMjAwOC0xMC0wNCA6IElnb3IgUGF2bG92IDogUHVibGljIGRvbWFpbiAqLworCisjaWZuZGVmIF9fTFpNQURFQ19ICisjZGVmaW5lIF9fTFpNQURFQ19ICisKKyNpbmNsdWRlICJUeXBlcy5oIgorCisvKiAjZGVmaW5lIF9MWk1BX1BST0IzMiAqLworLyogX0xaTUFfUFJPQjMyIGNhbiBpbmNyZWFzZSB0aGUgc3BlZWQgb24gc29tZSBDUFVzLAorICAgYnV0IG1lbW9yeSB1c2FnZSBmb3IgQ0x6bWFEZWM6OnByb2JzIHdpbGwgYmUgZG91YmxlZCBpbiB0aGF0IGNhc2UgKi8KKworI2lmZGVmIF9MWk1BX1BST0IzMgorI2RlZmluZSBDTHptYVByb2IgVUludDMyCisjZWxzZQorI2RlZmluZSBDTHptYVByb2IgVUludDE2CisjZW5kaWYKKworCisvKiAtLS0tLS0tLS0tIExaTUEgUHJvcGVydGllcyAtLS0tLS0tLS0tICovCisKKyNkZWZpbmUgTFpNQV9QUk9QU19TSVpFIDUKKwordHlwZWRlZiBzdHJ1Y3QgX0NMem1hUHJvcHMKK3sKKyAgdW5zaWduZWQgbGMsIGxwLCBwYjsKKyAgVUludDMyIGRpY1NpemU7Cit9IENMem1hUHJvcHM7CisKKy8qIEx6bWFQcm9wc19EZWNvZGUgLSBkZWNvZGVzIHByb3BlcnRpZXMKK1JldHVybnM6CisgIFNaX09LCisgIFNaX0VSUk9SX1VOU1VQUE9SVEVEIC0gVW5zdXBwb3J0ZWQgcHJvcGVydGllcworKi8KKworU1JlcyBMem1hUHJvcHNfRGVjb2RlKENMem1hUHJvcHMgKnAsIGNvbnN0IEJ5dGUgKmRhdGEsIHVuc2lnbmVkIHNpemUpOworCisKKy8qIC0tLS0tLS0tLS0gTFpNQSBEZWNvZGVyIHN0YXRlIC0tLS0tLS0tLS0gKi8KKworLyogTFpNQV9SRVFVSVJFRF9JTlBVVF9NQVggPSBudW1iZXIgb2YgcmVxdWlyZWQgaW5wdXQgYnl0ZXMgZm9yIHdvcnN0IGNhc2UuCisgICBOdW0gYml0cyA9IGxvZzIoKDJeMTEgLyAzMSkgXiAyMikgKyAyNiA8IDEzNCArIDI2ID0gMTYwOyAqLworCisjZGVmaW5lIExaTUFfUkVRVUlSRURfSU5QVVRfTUFYIDIwCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIENMem1hUHJvcHMgcHJvcDsKKyAgQ0x6bWFQcm9iICpwcm9iczsKKyAgQnl0ZSAqZGljOworICBjb25zdCBCeXRlICpidWY7CisgIFVJbnQzMiByYW5nZSwgY29kZTsKKyAgU2l6ZVQgZGljUG9zOworICBTaXplVCBkaWNCdWZTaXplOworICBVSW50MzIgcHJvY2Vzc2VkUG9zOworICBVSW50MzIgY2hlY2tEaWNTaXplOworICB1bnNpZ25lZCBzdGF0ZTsKKyAgVUludDMyIHJlcHNbNF07CisgIHVuc2lnbmVkIHJlbWFpbkxlbjsKKyAgaW50IG5lZWRGbHVzaDsKKyAgaW50IG5lZWRJbml0U3RhdGU7CisgIFVJbnQzMiBudW1Qcm9iczsKKyAgdW5zaWduZWQgdGVtcEJ1ZlNpemU7CisgIEJ5dGUgdGVtcEJ1ZltMWk1BX1JFUVVJUkVEX0lOUFVUX01BWF07Cit9IENMem1hRGVjOworCisjZGVmaW5lIEx6bWFEZWNfQ29uc3RydWN0KHApIHsgKHApLT5kaWMgPSAwOyAocCktPnByb2JzID0gMDsgfQorCit2b2lkIEx6bWFEZWNfSW5pdChDTHptYURlYyAqcCk7CisKKy8qIFRoZXJlIGFyZSB0d28gdHlwZXMgb2YgTFpNQSBzdHJlYW1zOgorICAgICAwKSBTdHJlYW0gd2l0aCBlbmQgbWFyay4gVGhhdCBlbmQgbWFyayBhZGRzIGFib3V0IDYgYnl0ZXMgdG8gY29tcHJlc3NlZCBzaXplLgorICAgICAxKSBTdHJlYW0gd2l0aG91dCBlbmQgbWFyay4gWW91IG11c3Qga25vdyBleGFjdCB1bmNvbXByZXNzZWQgc2l6ZSB0byBkZWNvbXByZXNzIHN1Y2ggc3RyZWFtLiAqLworCit0eXBlZGVmIGVudW0KK3sKKyAgTFpNQV9GSU5JU0hfQU5ZLCAgIC8qIGZpbmlzaCBhdCBhbnkgcG9pbnQgKi8KKyAgTFpNQV9GSU5JU0hfRU5EICAgIC8qIGJsb2NrIG11c3QgYmUgZmluaXNoZWQgYXQgdGhlIGVuZCAqLworfSBFTHptYUZpbmlzaE1vZGU7CisKKy8qIEVMem1hRmluaXNoTW9kZSBoYXMgbWVhbmluZyBvbmx5IGlmIHRoZSBkZWNvZGluZyByZWFjaGVzIG91dHB1dCBsaW1pdCAhISEKKworICAgWW91IG11c3QgdXNlIExaTUFfRklOSVNIX0VORCwgd2hlbiB5b3Uga25vdyB0aGF0IGN1cnJlbnQgb3V0cHV0IGJ1ZmZlcgorICAgY292ZXJzIGxhc3QgYnl0ZXMgb2YgYmxvY2suIEluIG90aGVyIGNhc2VzIHlvdSBtdXN0IHVzZSBMWk1BX0ZJTklTSF9BTlkuCisKKyAgIElmIExaTUEgZGVjb2RlciBzZWVzIGVuZCBtYXJrZXIgYmVmb3JlIHJlYWNoaW5nIG91dHB1dCBsaW1pdCwgaXQgcmV0dXJucyBTWl9PSywKKyAgIGFuZCBvdXRwdXQgdmFsdWUgb2YgZGVzdExlbiB3aWxsIGJlIGxlc3MgdGhhbiBvdXRwdXQgYnVmZmVyIHNpemUgbGltaXQuCisgICBZb3UgY2FuIGNoZWNrIHN0YXR1cyByZXN1bHQgYWxzby4KKworICAgWW91IGNhbiB1c2UgbXVsdGlwbGUgY2hlY2tzIHRvIHRlc3QgZGF0YSBpbnRlZ3JpdHkgYWZ0ZXIgZnVsbCBkZWNvbXByZXNzaW9uOgorICAgICAxKSBDaGVjayBSZXN1bHQgYW5kICJzdGF0dXMiIHZhcmlhYmxlLgorICAgICAyKSBDaGVjayB0aGF0IG91dHB1dChkZXN0TGVuKSA9IHVuY29tcHJlc3NlZFNpemUsIGlmIHlvdSBrbm93IHJlYWwgdW5jb21wcmVzc2VkU2l6ZS4KKyAgICAgMykgQ2hlY2sgdGhhdCBvdXRwdXQoc3JjTGVuKSA9IGNvbXByZXNzZWRTaXplLCBpZiB5b3Uga25vdyByZWFsIGNvbXByZXNzZWRTaXplLgorICAgICAgICBZb3UgbXVzdCB1c2UgY29ycmVjdCBmaW5pc2ggbW9kZSBpbiB0aGF0IGNhc2UuICovCisKK3R5cGVkZWYgZW51bQoreworICBMWk1BX1NUQVRVU19OT1RfU1BFQ0lGSUVELCAgICAgICAgICAgICAgIC8qIHVzZSBtYWluIGVycm9yIGNvZGUgaW5zdGVhZCAqLworICBMWk1BX1NUQVRVU19GSU5JU0hFRF9XSVRIX01BUkssICAgICAgICAgIC8qIHN0cmVhbSB3YXMgZmluaXNoZWQgd2l0aCBlbmQgbWFyay4gKi8KKyAgTFpNQV9TVEFUVVNfTk9UX0ZJTklTSEVELCAgICAgICAgICAgICAgICAvKiBzdHJlYW0gd2FzIG5vdCBmaW5pc2hlZCAqLworICBMWk1BX1NUQVRVU19ORUVEU19NT1JFX0lOUFVULCAgICAgICAgICAgIC8qIHlvdSBtdXN0IHByb3ZpZGUgbW9yZSBpbnB1dCBieXRlcyAqLworICBMWk1BX1NUQVRVU19NQVlCRV9GSU5JU0hFRF9XSVRIT1VUX01BUksgIC8qIHRoZXJlIGlzIHByb2JhYmlsaXR5IHRoYXQgc3RyZWFtIHdhcyBmaW5pc2hlZCB3aXRob3V0IGVuZCBtYXJrICovCit9IEVMem1hU3RhdHVzOworCisvKiBFTHptYVN0YXR1cyBpcyB1c2VkIG9ubHkgYXMgb3V0cHV0IHZhbHVlIGZvciBmdW5jdGlvbiBjYWxsICovCisKKworLyogLS0tLS0tLS0tLSBJbnRlcmZhY2VzIC0tLS0tLS0tLS0gKi8KKworLyogVGhlcmUgYXJlIDMgbGV2ZWxzIG9mIGludGVyZmFjZXM6CisgICAgIDEpIERpY3Rpb25hcnkgSW50ZXJmYWNlCisgICAgIDIpIEJ1ZmZlciBJbnRlcmZhY2UKKyAgICAgMykgT25lIENhbGwgSW50ZXJmYWNlCisgICBZb3UgY2FuIHNlbGVjdCBhbnkgb2YgdGhlc2UgaW50ZXJmYWNlcywgYnV0IGRvbid0IG1peCBmdW5jdGlvbnMgZnJvbSBkaWZmZXJlbnQKKyAgIGdyb3VwcyBmb3Igc2FtZSBvYmplY3QuICovCisKKworLyogVGhlcmUgYXJlIHR3byB2YXJpYW50cyB0byBhbGxvY2F0ZSBzdGF0ZSBmb3IgRGljdGlvbmFyeSBJbnRlcmZhY2U6CisgICAgIDEpIEx6bWFEZWNfQWxsb2NhdGUgLyBMem1hRGVjX0ZyZWUKKyAgICAgMikgTHptYURlY19BbGxvY2F0ZVByb2JzIC8gTHptYURlY19GcmVlUHJvYnMKKyAgIFlvdSBjYW4gdXNlIHZhcmlhbnQgMiwgaWYgeW91IHNldCBkaWN0aW9uYXJ5IGJ1ZmZlciBtYW51YWxseS4KKyAgIEZvciBCdWZmZXIgSW50ZXJmYWNlIHlvdSBtdXN0IGFsd2F5cyB1c2UgdmFyaWFudCAxLgorCitMem1hRGVjX0FsbG9jYXRlKiBjYW4gcmV0dXJuOgorICBTWl9PSworICBTWl9FUlJPUl9NRU0gICAgICAgICAtIE1lbW9yeSBhbGxvY2F0aW9uIGVycm9yCisgIFNaX0VSUk9SX1VOU1VQUE9SVEVEIC0gVW5zdXBwb3J0ZWQgcHJvcGVydGllcworKi8KKworU1JlcyBMem1hRGVjX0FsbG9jYXRlUHJvYnMoQ0x6bWFEZWMgKnAsIGNvbnN0IEJ5dGUgKnByb3BzLCB1bnNpZ25lZCBwcm9wc1NpemUsIElTekFsbG9jICphbGxvYyk7Cit2b2lkIEx6bWFEZWNfRnJlZVByb2JzKENMem1hRGVjICpwLCBJU3pBbGxvYyAqYWxsb2MpOworCitTUmVzIEx6bWFEZWNfQWxsb2NhdGUoQ0x6bWFEZWMgKnN0YXRlLCBjb25zdCBCeXRlICpwcm9wLCB1bnNpZ25lZCBwcm9wc1NpemUsIElTekFsbG9jICphbGxvYyk7Cit2b2lkIEx6bWFEZWNfRnJlZShDTHptYURlYyAqc3RhdGUsIElTekFsbG9jICphbGxvYyk7CisKKy8qIC0tLS0tLS0tLS0gRGljdGlvbmFyeSBJbnRlcmZhY2UgLS0tLS0tLS0tLSAqLworCisvKiBZb3UgY2FuIHVzZSBpdCwgaWYgeW91IHdhbnQgdG8gZWxpbWluYXRlIHRoZSBvdmVyaGVhZCBmb3IgZGF0YSBjb3B5aW5nIGZyb20KKyAgIGRpY3Rpb25hcnkgdG8gc29tZSBvdGhlciBleHRlcm5hbCBidWZmZXIuCisgICBZb3UgbXVzdCB3b3JrIHdpdGggQ0x6bWFEZWMgdmFyaWFibGVzIGRpcmVjdGx5IGluIHRoaXMgaW50ZXJmYWNlLgorCisgICBTVEVQUzoKKyAgICAgTHptYURlY19Db25zdHIoKQorICAgICBMem1hRGVjX0FsbG9jYXRlKCkKKyAgICAgZm9yIChlYWNoIG5ldyBzdHJlYW0pCisgICAgIHsKKyAgICAgICBMem1hRGVjX0luaXQoKQorICAgICAgIHdoaWxlIChpdCBuZWVkcyBtb3JlIGRlY29tcHJlc3Npb24pCisgICAgICAgeworICAgICAgICAgTHptYURlY19EZWNvZGVUb0RpYygpCisgICAgICAgICB1c2UgZGF0YSBmcm9tIENMem1hRGVjOjpkaWMgYW5kIHVwZGF0ZSBDTHptYURlYzo6ZGljUG9zCisgICAgICAgfQorICAgICB9CisgICAgIEx6bWFEZWNfRnJlZSgpCisqLworCisvKiBMem1hRGVjX0RlY29kZVRvRGljCisKKyAgIFRoZSBkZWNvZGluZyB0byBpbnRlcm5hbCBkaWN0aW9uYXJ5IGJ1ZmZlciAoQ0x6bWFEZWM6OmRpYykuCisgICBZb3UgbXVzdCBtYW51YWxseSB1cGRhdGUgQ0x6bWFEZWM6OmRpY1BvcywgaWYgaXQgcmVhY2hlcyBDTHptYURlYzo6ZGljQnVmU2l6ZSAhISEKKworZmluaXNoTW9kZToKKyAgSXQgaGFzIG1lYW5pbmcgb25seSBpZiB0aGUgZGVjb2RpbmcgcmVhY2hlcyBvdXRwdXQgbGltaXQgKGRpY0xpbWl0KS4KKyAgTFpNQV9GSU5JU0hfQU5ZIC0gRGVjb2RlIGp1c3QgZGljTGltaXQgYnl0ZXMuCisgIExaTUFfRklOSVNIX0VORCAtIFN0cmVhbSBtdXN0IGJlIGZpbmlzaGVkIGFmdGVyIGRpY0xpbWl0LgorCitSZXR1cm5zOgorICBTWl9PSworICAgIHN0YXR1czoKKyAgICAgIExaTUFfU1RBVFVTX0ZJTklTSEVEX1dJVEhfTUFSSworICAgICAgTFpNQV9TVEFUVVNfTk9UX0ZJTklTSEVECisgICAgICBMWk1BX1NUQVRVU19ORUVEU19NT1JFX0lOUFVUCisgICAgICBMWk1BX1NUQVRVU19NQVlCRV9GSU5JU0hFRF9XSVRIT1VUX01BUksKKyAgU1pfRVJST1JfREFUQSAtIERhdGEgZXJyb3IKKyovCisKK1NSZXMgTHptYURlY19EZWNvZGVUb0RpYyhDTHptYURlYyAqcCwgU2l6ZVQgZGljTGltaXQsCisgICAgY29uc3QgQnl0ZSAqc3JjLCBTaXplVCAqc3JjTGVuLCBFTHptYUZpbmlzaE1vZGUgZmluaXNoTW9kZSwgRUx6bWFTdGF0dXMgKnN0YXR1cyk7CisKKworLyogLS0tLS0tLS0tLSBCdWZmZXIgSW50ZXJmYWNlIC0tLS0tLS0tLS0gKi8KKworLyogSXQncyB6bGliLWxpa2UgaW50ZXJmYWNlLgorICAgU2VlIEx6bWFEZWNfRGVjb2RlVG9EaWMgZGVzY3JpcHRpb24gZm9yIGluZm9ybWF0aW9uIGFib3V0IFNURVBTIGFuZCByZXR1cm4gcmVzdWx0cywKKyAgIGJ1dCB5b3UgbXVzdCB1c2UgTHptYURlY19EZWNvZGVUb0J1ZiBpbnN0ZWFkIG9mIEx6bWFEZWNfRGVjb2RlVG9EaWMgYW5kIHlvdSBkb24ndCBuZWVkCisgICB0byB3b3JrIHdpdGggQ0x6bWFEZWMgdmFyaWFibGVzIG1hbnVhbGx5LgorCitmaW5pc2hNb2RlOgorICBJdCBoYXMgbWVhbmluZyBvbmx5IGlmIHRoZSBkZWNvZGluZyByZWFjaGVzIG91dHB1dCBsaW1pdCAoKmRlc3RMZW4pLgorICBMWk1BX0ZJTklTSF9BTlkgLSBEZWNvZGUganVzdCBkZXN0TGVuIGJ5dGVzLgorICBMWk1BX0ZJTklTSF9FTkQgLSBTdHJlYW0gbXVzdCBiZSBmaW5pc2hlZCBhZnRlciAoKmRlc3RMZW4pLgorKi8KKworU1JlcyBMem1hRGVjX0RlY29kZVRvQnVmKENMem1hRGVjICpwLCBCeXRlICpkZXN0LCBTaXplVCAqZGVzdExlbiwKKyAgICBjb25zdCBCeXRlICpzcmMsIFNpemVUICpzcmNMZW4sIEVMem1hRmluaXNoTW9kZSBmaW5pc2hNb2RlLCBFTHptYVN0YXR1cyAqc3RhdHVzKTsKKworCisvKiAtLS0tLS0tLS0tIE9uZSBDYWxsIEludGVyZmFjZSAtLS0tLS0tLS0tICovCisKKy8qIEx6bWFEZWNvZGUKKworZmluaXNoTW9kZToKKyAgSXQgaGFzIG1lYW5pbmcgb25seSBpZiB0aGUgZGVjb2RpbmcgcmVhY2hlcyBvdXRwdXQgbGltaXQgKCpkZXN0TGVuKS4KKyAgTFpNQV9GSU5JU0hfQU5ZIC0gRGVjb2RlIGp1c3QgZGVzdExlbiBieXRlcy4KKyAgTFpNQV9GSU5JU0hfRU5EIC0gU3RyZWFtIG11c3QgYmUgZmluaXNoZWQgYWZ0ZXIgKCpkZXN0TGVuKS4KKworUmV0dXJuczoKKyAgU1pfT0sKKyAgICBzdGF0dXM6CisgICAgICBMWk1BX1NUQVRVU19GSU5JU0hFRF9XSVRIX01BUksKKyAgICAgIExaTUFfU1RBVFVTX05PVF9GSU5JU0hFRAorICAgICAgTFpNQV9TVEFUVVNfTUFZQkVfRklOSVNIRURfV0lUSE9VVF9NQVJLCisgIFNaX0VSUk9SX0RBVEEgLSBEYXRhIGVycm9yCisgIFNaX0VSUk9SX01FTSAgLSBNZW1vcnkgYWxsb2NhdGlvbiBlcnJvcgorICBTWl9FUlJPUl9VTlNVUFBPUlRFRCAtIFVuc3VwcG9ydGVkIHByb3BlcnRpZXMKKyAgU1pfRVJST1JfSU5QVVRfRU9GIC0gSXQgbmVlZHMgbW9yZSBieXRlcyBpbiBpbnB1dCBidWZmZXIgKHNyYykuCisqLworCitTUmVzIEx6bWFEZWNvZGUoQnl0ZSAqZGVzdCwgU2l6ZVQgKmRlc3RMZW4sIGNvbnN0IEJ5dGUgKnNyYywgU2l6ZVQgKnNyY0xlbiwKKyAgICBjb25zdCBCeXRlICpwcm9wRGF0YSwgdW5zaWduZWQgcHJvcFNpemUsIEVMem1hRmluaXNoTW9kZSBmaW5pc2hNb2RlLAorICAgIEVMem1hU3RhdHVzICpzdGF0dXMsIElTekFsbG9jICphbGxvYyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliX2dlbmVyaWMvbHptYS9Mem1hRGVjb2RlLmMgYi9saWJfZ2VuZXJpYy9sem1hL0x6bWFEZWNvZGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQ3MGU1NS4uMDAwMDAwMAotLS0gYS9saWJfZ2VuZXJpYy9sem1hL0x6bWFEZWNvZGUuYworKysgL2Rldi9udWxsCkBAIC0xLDU4NCArMCwwIEBACi0vKgotICBMem1hRGVjb2RlLmMKLSAgTFpNQSBEZWNvZGVyIChvcHRpbWl6ZWQgZm9yIFNwZWVkIHZlcnNpb24pCi0KLSAgTFpNQSBTREsgNC40MCBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNiBJZ29yIFBhdmxvdiAoMjAwNi0wNS0wMSkKLSAgaHR0cDovL3d3dy43LXppcC5vcmcvCi0KLSAgTFpNQSBTREsgaXMgbGljZW5zZWQgdW5kZXIgdHdvIGxpY2Vuc2VzOgotICAxKSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdOVSBMR1BMKQotICAyKSBDb21tb24gUHVibGljIExpY2Vuc2UgKENQTCkKLSAgSXQgbWVhbnMgdGhhdCB5b3UgY2FuIHNlbGVjdCBvbmUgb2YgdGhlc2UgdHdvIGxpY2Vuc2VzIGFuZAotICBmb2xsb3cgcnVsZXMgb2YgdGhhdCBsaWNlbnNlLgotCi0gIFNQRUNJQUwgRVhDRVBUSU9OOgotICBJZ29yIFBhdmxvdiwgYXMgdGhlIGF1dGhvciBvZiB0aGlzIENvZGUsIGV4cHJlc3NseSBwZXJtaXRzIHlvdSB0bwotICBzdGF0aWNhbGx5IG9yIGR5bmFtaWNhbGx5IGxpbmsgeW91ciBDb2RlIChvciBiaW5kIGJ5IG5hbWUpIHRvIHRoZQotICBpbnRlcmZhY2VzIG9mIHRoaXMgZmlsZSB3aXRob3V0IHN1YmplY3RpbmcgeW91ciBsaW5rZWQgQ29kZSB0byB0aGUKLSAgdGVybXMgb2YgdGhlIENQTCBvciBHTlUgTEdQTC4gQW55IG1vZGlmaWNhdGlvbnMgb3IgYWRkaXRpb25zCi0gIHRvIHRoaXMgZmlsZSwgaG93ZXZlciwgYXJlIHN1YmplY3QgdG8gdGhlIExHUEwgb3IgQ1BMIHRlcm1zLgotKi8KLQotI2luY2x1ZGUgIkx6bWFEZWNvZGUuaCIKLQotI2RlZmluZSBrTnVtVG9wQml0cyAyNAotI2RlZmluZSBrVG9wVmFsdWUgKChVSW50MzIpMSA8PCBrTnVtVG9wQml0cykKLQotI2RlZmluZSBrTnVtQml0TW9kZWxUb3RhbEJpdHMgMTEKLSNkZWZpbmUga0JpdE1vZGVsVG90YWwgKDEgPDwga051bUJpdE1vZGVsVG90YWxCaXRzKQotI2RlZmluZSBrTnVtTW92ZUJpdHMgNQotCi0jZGVmaW5lIFJDX1JFQURfQllURSAoKkJ1ZmZlcisrKQotCi0jZGVmaW5lIFJDX0lOSVQyIENvZGUgPSAwOyBSYW5nZSA9IDB4RkZGRkZGRkY7IFwKLSAgeyBpbnQgaTsgZm9yKGkgPSAwOyBpIDwgNTsgaSsrKSB7IFJDX1RFU1Q7IENvZGUgPSAoQ29kZSA8PCA4KSB8IFJDX1JFQURfQllURTsgfX0KLQotI2lmZGVmIF9MWk1BX0lOX0NCCi0KLSNkZWZpbmUgUkNfVEVTVCB7IGlmIChCdWZmZXIgPT0gQnVmZmVyTGltKSBcCi0gIHsgU2l6ZVQgc2l6ZTsgaW50IHJlc3VsdCA9IEluQ2FsbGJhY2stPlJlYWQoSW5DYWxsYmFjaywgJkJ1ZmZlciwgJnNpemUpOyBpZiAocmVzdWx0ICE9IExaTUFfUkVTVUxUX09LKSByZXR1cm4gcmVzdWx0OyBcCi0gIEJ1ZmZlckxpbSA9IEJ1ZmZlciArIHNpemU7IGlmIChzaXplID09IDApIHJldHVybiBMWk1BX1JFU1VMVF9EQVRBX0VSUk9SOyB9fQotCi0jZGVmaW5lIFJDX0lOSVQgQnVmZmVyID0gQnVmZmVyTGltID0gMDsgUkNfSU5JVDIKLQotI2Vsc2UKLQotI2RlZmluZSBSQ19URVNUIHsgaWYgKEJ1ZmZlciA9PSBCdWZmZXJMaW0pIHJldHVybiBMWk1BX1JFU1VMVF9EQVRBX0VSUk9SOyB9Ci0KLSNkZWZpbmUgUkNfSU5JVChidWZmZXIsIGJ1ZmZlclNpemUpIEJ1ZmZlciA9IGJ1ZmZlcjsgQnVmZmVyTGltID0gYnVmZmVyICsgYnVmZmVyU2l6ZTsgUkNfSU5JVDIKLQotI2VuZGlmCi0KLSNkZWZpbmUgUkNfTk9STUFMSVpFIGlmIChSYW5nZSA8IGtUb3BWYWx1ZSkgeyBSQ19URVNUOyBSYW5nZSA8PD0gODsgQ29kZSA9IChDb2RlIDw8IDgpIHwgUkNfUkVBRF9CWVRFOyB9Ci0KLSNkZWZpbmUgSWZCaXQwKHApIFJDX05PUk1BTElaRTsgYm91bmQgPSAoUmFuZ2UgPj4ga051bUJpdE1vZGVsVG90YWxCaXRzKSAqICoocCk7IGlmIChDb2RlIDwgYm91bmQpCi0jZGVmaW5lIFVwZGF0ZUJpdDAocCkgUmFuZ2UgPSBib3VuZDsgKihwKSArPSAoa0JpdE1vZGVsVG90YWwgLSAqKHApKSA+PiBrTnVtTW92ZUJpdHM7Ci0jZGVmaW5lIFVwZGF0ZUJpdDEocCkgUmFuZ2UgLT0gYm91bmQ7IENvZGUgLT0gYm91bmQ7ICoocCkgLT0gKCoocCkpID4+IGtOdW1Nb3ZlQml0czsKLQotI2RlZmluZSBSQ19HRVRfQklUMihwLCBtaSwgQTAsIEExKSBJZkJpdDAocCkgXAotICB7IFVwZGF0ZUJpdDAocCk7IG1pIDw8PSAxOyBBMDsgfSBlbHNlIFwKLSAgeyBVcGRhdGVCaXQxKHApOyBtaSA9IChtaSArIG1pKSArIDE7IEExOyB9Ci0KLSNkZWZpbmUgUkNfR0VUX0JJVChwLCBtaSkgUkNfR0VUX0JJVDIocCwgbWksIDsgLCA7KQotCi0jZGVmaW5lIFJhbmdlRGVjb2RlckJpdFRyZWVEZWNvZGUocHJvYnMsIG51bUxldmVscywgcmVzKSBcCi0gIHsgaW50IGkgPSBudW1MZXZlbHM7IHJlcyA9IDE7IFwKLSAgZG8geyBDUHJvYiAqcCA9IHByb2JzICsgcmVzOyBSQ19HRVRfQklUKHAsIHJlcykgfSB3aGlsZSgtLWkgIT0gMCk7IFwKLSAgcmVzIC09ICgxIDw8IG51bUxldmVscyk7IH0KLQotCi0jZGVmaW5lIGtOdW1Qb3NCaXRzTWF4IDQKLSNkZWZpbmUga051bVBvc1N0YXRlc01heCAoMSA8PCBrTnVtUG9zQml0c01heCkKLQotI2RlZmluZSBrTGVuTnVtTG93Qml0cyAzCi0jZGVmaW5lIGtMZW5OdW1Mb3dTeW1ib2xzICgxIDw8IGtMZW5OdW1Mb3dCaXRzKQotI2RlZmluZSBrTGVuTnVtTWlkQml0cyAzCi0jZGVmaW5lIGtMZW5OdW1NaWRTeW1ib2xzICgxIDw8IGtMZW5OdW1NaWRCaXRzKQotI2RlZmluZSBrTGVuTnVtSGlnaEJpdHMgOAotI2RlZmluZSBrTGVuTnVtSGlnaFN5bWJvbHMgKDEgPDwga0xlbk51bUhpZ2hCaXRzKQotCi0jZGVmaW5lIExlbkNob2ljZSAwCi0jZGVmaW5lIExlbkNob2ljZTIgKExlbkNob2ljZSArIDEpCi0jZGVmaW5lIExlbkxvdyAoTGVuQ2hvaWNlMiArIDEpCi0jZGVmaW5lIExlbk1pZCAoTGVuTG93ICsgKGtOdW1Qb3NTdGF0ZXNNYXggPDwga0xlbk51bUxvd0JpdHMpKQotI2RlZmluZSBMZW5IaWdoIChMZW5NaWQgKyAoa051bVBvc1N0YXRlc01heCA8PCBrTGVuTnVtTWlkQml0cykpCi0jZGVmaW5lIGtOdW1MZW5Qcm9icyAoTGVuSGlnaCArIGtMZW5OdW1IaWdoU3ltYm9scykKLQotCi0jZGVmaW5lIGtOdW1TdGF0ZXMgMTIKLSNkZWZpbmUga051bUxpdFN0YXRlcyA3Ci0KLSNkZWZpbmUga1N0YXJ0UG9zTW9kZWxJbmRleCA0Ci0jZGVmaW5lIGtFbmRQb3NNb2RlbEluZGV4IDE0Ci0jZGVmaW5lIGtOdW1GdWxsRGlzdGFuY2VzICgxIDw8IChrRW5kUG9zTW9kZWxJbmRleCA+PiAxKSkKLQotI2RlZmluZSBrTnVtUG9zU2xvdEJpdHMgNgotI2RlZmluZSBrTnVtTGVuVG9Qb3NTdGF0ZXMgNAotCi0jZGVmaW5lIGtOdW1BbGlnbkJpdHMgNAotI2RlZmluZSBrQWxpZ25UYWJsZVNpemUgKDEgPDwga051bUFsaWduQml0cykKLQotI2RlZmluZSBrTWF0Y2hNaW5MZW4gMgotCi0jZGVmaW5lIElzTWF0Y2ggMAotI2RlZmluZSBJc1JlcCAoSXNNYXRjaCArIChrTnVtU3RhdGVzIDw8IGtOdW1Qb3NCaXRzTWF4KSkKLSNkZWZpbmUgSXNSZXBHMCAoSXNSZXAgKyBrTnVtU3RhdGVzKQotI2RlZmluZSBJc1JlcEcxIChJc1JlcEcwICsga051bVN0YXRlcykKLSNkZWZpbmUgSXNSZXBHMiAoSXNSZXBHMSArIGtOdW1TdGF0ZXMpCi0jZGVmaW5lIElzUmVwMExvbmcgKElzUmVwRzIgKyBrTnVtU3RhdGVzKQotI2RlZmluZSBQb3NTbG90IChJc1JlcDBMb25nICsgKGtOdW1TdGF0ZXMgPDwga051bVBvc0JpdHNNYXgpKQotI2RlZmluZSBTcGVjUG9zIChQb3NTbG90ICsgKGtOdW1MZW5Ub1Bvc1N0YXRlcyA8PCBrTnVtUG9zU2xvdEJpdHMpKQotI2RlZmluZSBBbGlnbiAoU3BlY1BvcyArIGtOdW1GdWxsRGlzdGFuY2VzIC0ga0VuZFBvc01vZGVsSW5kZXgpCi0jZGVmaW5lIExlbkNvZGVyIChBbGlnbiArIGtBbGlnblRhYmxlU2l6ZSkKLSNkZWZpbmUgUmVwTGVuQ29kZXIgKExlbkNvZGVyICsga051bUxlblByb2JzKQotI2RlZmluZSBMaXRlcmFsIChSZXBMZW5Db2RlciArIGtOdW1MZW5Qcm9icykKLQotI2lmIExpdGVyYWwgIT0gTFpNQV9CQVNFX1NJWkUKLVN0b3BDb21waWxpbmdEdWVCVUcKLSNlbmRpZgotCi1pbnQgTHptYURlY29kZVByb3BlcnRpZXMoQ0x6bWFQcm9wZXJ0aWVzICpwcm9wc1JlcywgY29uc3QgdW5zaWduZWQgY2hhciAqcHJvcHNEYXRhLCBpbnQgc2l6ZSkKLXsKLSAgdW5zaWduZWQgY2hhciBwcm9wMDsKLSAgaWYgKHNpemUgPCBMWk1BX1BST1BFUlRJRVNfU0laRSkKLSAgICByZXR1cm4gTFpNQV9SRVNVTFRfREFUQV9FUlJPUjsKLSAgcHJvcDAgPSBwcm9wc0RhdGFbMF07Ci0gIGlmIChwcm9wMCA+PSAoOSAqIDUgKiA1KSkKLSAgICByZXR1cm4gTFpNQV9SRVNVTFRfREFUQV9FUlJPUjsKLSAgewotICAgIGZvciAocHJvcHNSZXMtPnBiID0gMDsgcHJvcDAgPj0gKDkgKiA1KTsgcHJvcHNSZXMtPnBiKyssIHByb3AwIC09ICg5ICogNSkpOwotICAgIGZvciAocHJvcHNSZXMtPmxwID0gMDsgcHJvcDAgPj0gOTsgcHJvcHNSZXMtPmxwKyssIHByb3AwIC09IDkpOwotICAgIHByb3BzUmVzLT5sYyA9IHByb3AwOwotICAgIC8qCi0gICAgdW5zaWduZWQgY2hhciByZW1haW5kZXIgPSAodW5zaWduZWQgY2hhcikocHJvcDAgLyA5KTsKLSAgICBwcm9wc1Jlcy0+bGMgPSBwcm9wMCAlIDk7Ci0gICAgcHJvcHNSZXMtPnBiID0gcmVtYWluZGVyIC8gNTsKLSAgICBwcm9wc1Jlcy0+bHAgPSByZW1haW5kZXIgJSA1OwotICAgICovCi0gIH0KLQotICAjaWZkZWYgX0xaTUFfT1VUX1JFQUQKLSAgewotICAgIGludCBpOwotICAgIHByb3BzUmVzLT5EaWN0aW9uYXJ5U2l6ZSA9IDA7Ci0gICAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKLSAgICAgIHByb3BzUmVzLT5EaWN0aW9uYXJ5U2l6ZSArPSAoVUludDMyKShwcm9wc0RhdGFbMSArIGldKSA8PCAoaSAqIDgpOwotICAgIGlmIChwcm9wc1Jlcy0+RGljdGlvbmFyeVNpemUgPT0gMCkKLSAgICAgIHByb3BzUmVzLT5EaWN0aW9uYXJ5U2l6ZSA9IDE7Ci0gIH0KLSAgI2VuZGlmCi0gIHJldHVybiBMWk1BX1JFU1VMVF9PSzsKLX0KLQotI2RlZmluZSBrTHptYVN0cmVhbVdhc0ZpbmlzaGVkSWQgKC0xKQotCi1pbnQgTHptYURlY29kZShDTHptYURlY29kZXJTdGF0ZSAqdnMsCi0gICAgI2lmZGVmIF9MWk1BX0lOX0NCCi0gICAgSUx6bWFJbkNhbGxiYWNrICpJbkNhbGxiYWNrLAotICAgICNlbHNlCi0gICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5TdHJlYW0sIFNpemVUIGluU2l6ZSwgU2l6ZVQgKmluU2l6ZVByb2Nlc3NlZCwKLSAgICAjZW5kaWYKLSAgICB1bnNpZ25lZCBjaGFyICpvdXRTdHJlYW0sIFNpemVUIG91dFNpemUsIFNpemVUICpvdXRTaXplUHJvY2Vzc2VkKQotewotICBDUHJvYiAqcCA9IHZzLT5Qcm9iczsKLSAgU2l6ZVQgbm93UG9zID0gMDsKLSAgQnl0ZSBwcmV2aW91c0J5dGUgPSAwOwotICBVSW50MzIgcG9zU3RhdGVNYXNrID0gKDEgPDwgKHZzLT5Qcm9wZXJ0aWVzLnBiKSkgLSAxOwotICBVSW50MzIgbGl0ZXJhbFBvc01hc2sgPSAoMSA8PCAodnMtPlByb3BlcnRpZXMubHApKSAtIDE7Ci0gIGludCBsYyA9IHZzLT5Qcm9wZXJ0aWVzLmxjOwotCi0gICNpZmRlZiBfTFpNQV9PVVRfUkVBRAotCi0gIFVJbnQzMiBSYW5nZSA9IHZzLT5SYW5nZTsKLSAgVUludDMyIENvZGUgPSB2cy0+Q29kZTsKLSAgI2lmZGVmIF9MWk1BX0lOX0NCCi0gIGNvbnN0IEJ5dGUgKkJ1ZmZlciA9IHZzLT5CdWZmZXI7Ci0gIGNvbnN0IEJ5dGUgKkJ1ZmZlckxpbSA9IHZzLT5CdWZmZXJMaW07Ci0gICNlbHNlCi0gIGNvbnN0IEJ5dGUgKkJ1ZmZlciA9IGluU3RyZWFtOwotICBjb25zdCBCeXRlICpCdWZmZXJMaW0gPSBpblN0cmVhbSArIGluU2l6ZTsKLSAgI2VuZGlmCi0gIGludCBzdGF0ZSA9IHZzLT5TdGF0ZTsKLSAgVUludDMyIHJlcDAgPSB2cy0+UmVwc1swXSwgcmVwMSA9IHZzLT5SZXBzWzFdLCByZXAyID0gdnMtPlJlcHNbMl0sIHJlcDMgPSB2cy0+UmVwc1szXTsKLSAgaW50IGxlbiA9IHZzLT5SZW1haW5MZW47Ci0gIFVJbnQzMiBnbG9iYWxQb3MgPSB2cy0+R2xvYmFsUG9zOwotICBVSW50MzIgZGlzdGFuY2VMaW1pdCA9IHZzLT5EaXN0YW5jZUxpbWl0OwotCi0gIEJ5dGUgKmRpY3Rpb25hcnkgPSB2cy0+RGljdGlvbmFyeTsKLSAgVUludDMyIGRpY3Rpb25hcnlTaXplID0gdnMtPlByb3BlcnRpZXMuRGljdGlvbmFyeVNpemU7Ci0gIFVJbnQzMiBkaWN0aW9uYXJ5UG9zID0gdnMtPkRpY3Rpb25hcnlQb3M7Ci0KLSAgQnl0ZSB0ZW1wRGljdGlvbmFyeVs0XTsKLQotICAjaWZuZGVmIF9MWk1BX0lOX0NCCi0gICppblNpemVQcm9jZXNzZWQgPSAwOwotICAjZW5kaWYKLSAgKm91dFNpemVQcm9jZXNzZWQgPSAwOwotICBpZiAobGVuID09IGtMem1hU3RyZWFtV2FzRmluaXNoZWRJZCkKLSAgICByZXR1cm4gTFpNQV9SRVNVTFRfT0s7Ci0KLSAgaWYgKGRpY3Rpb25hcnlTaXplID09IDApCi0gIHsKLSAgICBkaWN0aW9uYXJ5ID0gdGVtcERpY3Rpb25hcnk7Ci0gICAgZGljdGlvbmFyeVNpemUgPSAxOwotICAgIHRlbXBEaWN0aW9uYXJ5WzBdID0gdnMtPlRlbXBEaWN0aW9uYXJ5WzBdOwotICB9Ci0KLSAgaWYgKGxlbiA9PSBrTHptYU5lZWRJbml0SWQpCi0gIHsKLSAgICB7Ci0gICAgICBVSW50MzIgbnVtUHJvYnMgPSBMaXRlcmFsICsgKChVSW50MzIpTFpNQV9MSVRfU0laRSA8PCAobGMgKyB2cy0+UHJvcGVydGllcy5scCkpOwotICAgICAgVUludDMyIGk7Ci0gICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtUHJvYnM7IGkrKykKLSAgICAgICAgcFtpXSA9IGtCaXRNb2RlbFRvdGFsID4+IDE7Ci0gICAgICByZXAwID0gcmVwMSA9IHJlcDIgPSByZXAzID0gMTsKLSAgICAgIHN0YXRlID0gMDsKLSAgICAgIGdsb2JhbFBvcyA9IDA7Ci0gICAgICBkaXN0YW5jZUxpbWl0ID0gMDsKLSAgICAgIGRpY3Rpb25hcnlQb3MgPSAwOwotICAgICAgZGljdGlvbmFyeVtkaWN0aW9uYXJ5U2l6ZSAtIDFdID0gMDsKLSAgICAgICNpZmRlZiBfTFpNQV9JTl9DQgotICAgICAgUkNfSU5JVDsKLSAgICAgICNlbHNlCi0gICAgICBSQ19JTklUKGluU3RyZWFtLCBpblNpemUpOwotICAgICAgI2VuZGlmCi0gICAgfQotICAgIGxlbiA9IDA7Ci0gIH0KLSAgd2hpbGUobGVuICE9IDAgJiYgbm93UG9zIDwgb3V0U2l6ZSkKLSAgewotICAgIFVJbnQzMiBwb3MgPSBkaWN0aW9uYXJ5UG9zIC0gcmVwMDsKLSAgICBpZiAocG9zID49IGRpY3Rpb25hcnlTaXplKQotICAgICAgcG9zICs9IGRpY3Rpb25hcnlTaXplOwotICAgIG91dFN0cmVhbVtub3dQb3MrK10gPSBkaWN0aW9uYXJ5W2RpY3Rpb25hcnlQb3NdID0gZGljdGlvbmFyeVtwb3NdOwotICAgIGlmICgrK2RpY3Rpb25hcnlQb3MgPT0gZGljdGlvbmFyeVNpemUpCi0gICAgICBkaWN0aW9uYXJ5UG9zID0gMDsKLSAgICBsZW4tLTsKLSAgfQotICBpZiAoZGljdGlvbmFyeVBvcyA9PSAwKQotICAgIHByZXZpb3VzQnl0ZSA9IGRpY3Rpb25hcnlbZGljdGlvbmFyeVNpemUgLSAxXTsKLSAgZWxzZQotICAgIHByZXZpb3VzQnl0ZSA9IGRpY3Rpb25hcnlbZGljdGlvbmFyeVBvcyAtIDFdOwotCi0gICNlbHNlIC8qIGlmICFfTFpNQV9PVVRfUkVBRCAqLwotCi0gIGludCBzdGF0ZSA9IDA7Ci0gIFVJbnQzMiByZXAwID0gMSwgcmVwMSA9IDEsIHJlcDIgPSAxLCByZXAzID0gMTsKLSAgaW50IGxlbiA9IDA7Ci0gIGNvbnN0IEJ5dGUgKkJ1ZmZlcjsKLSAgY29uc3QgQnl0ZSAqQnVmZmVyTGltOwotICBVSW50MzIgUmFuZ2U7Ci0gIFVJbnQzMiBDb2RlOwotCi0gICNpZm5kZWYgX0xaTUFfSU5fQ0IKLSAgKmluU2l6ZVByb2Nlc3NlZCA9IDA7Ci0gICNlbmRpZgotICAqb3V0U2l6ZVByb2Nlc3NlZCA9IDA7Ci0KLSAgewotICAgIFVJbnQzMiBpOwotICAgIFVJbnQzMiBudW1Qcm9icyA9IExpdGVyYWwgKyAoKFVJbnQzMilMWk1BX0xJVF9TSVpFIDw8IChsYyArIHZzLT5Qcm9wZXJ0aWVzLmxwKSk7Ci0gICAgZm9yIChpID0gMDsgaSA8IG51bVByb2JzOyBpKyspCi0gICAgICBwW2ldID0ga0JpdE1vZGVsVG90YWwgPj4gMTsKLSAgfQotCi0gICNpZmRlZiBfTFpNQV9JTl9DQgotICBSQ19JTklUOwotICAjZWxzZQotICBSQ19JTklUKGluU3RyZWFtLCBpblNpemUpOwotICAjZW5kaWYKLQotICAjZW5kaWYgLyogX0xaTUFfT1VUX1JFQUQgKi8KLQotICB3aGlsZShub3dQb3MgPCBvdXRTaXplKQotICB7Ci0gICAgQ1Byb2IgKnByb2I7Ci0gICAgVUludDMyIGJvdW5kOwotICAgIGludCBwb3NTdGF0ZSA9IChpbnQpKAotICAgICAgICAobm93UG9zCi0gICAgICAgICNpZmRlZiBfTFpNQV9PVVRfUkVBRAotICAgICAgICArIGdsb2JhbFBvcwotICAgICAgICAjZW5kaWYKLSAgICAgICAgKQotICAgICAgICAmIHBvc1N0YXRlTWFzayk7Ci0KLSAgICBwcm9iID0gcCArIElzTWF0Y2ggKyAoc3RhdGUgPDwga051bVBvc0JpdHNNYXgpICsgcG9zU3RhdGU7Ci0gICAgSWZCaXQwKHByb2IpCi0gICAgewotICAgICAgaW50IHN5bWJvbCA9IDE7Ci0gICAgICBVcGRhdGVCaXQwKHByb2IpCi0gICAgICBwcm9iID0gcCArIExpdGVyYWwgKyAoTFpNQV9MSVRfU0laRSAqCi0gICAgICAgICgoKAotICAgICAgICAobm93UG9zCi0gICAgICAgICNpZmRlZiBfTFpNQV9PVVRfUkVBRAotICAgICAgICArIGdsb2JhbFBvcwotICAgICAgICAjZW5kaWYKLSAgICAgICAgKQotICAgICAgICAmIGxpdGVyYWxQb3NNYXNrKSA8PCBsYykgKyAocHJldmlvdXNCeXRlID4+ICg4IC0gbGMpKSkpOwotCi0gICAgICBpZiAoc3RhdGUgPj0ga051bUxpdFN0YXRlcykKLSAgICAgIHsKLSAgICAgICAgaW50IG1hdGNoQnl0ZTsKLSAgICAgICAgI2lmZGVmIF9MWk1BX09VVF9SRUFECi0gICAgICAgIFVJbnQzMiBwb3MgPSBkaWN0aW9uYXJ5UG9zIC0gcmVwMDsKLSAgICAgICAgaWYgKHBvcyA+PSBkaWN0aW9uYXJ5U2l6ZSkKLSAgICAgICAgICBwb3MgKz0gZGljdGlvbmFyeVNpemU7Ci0gICAgICAgIG1hdGNoQnl0ZSA9IGRpY3Rpb25hcnlbcG9zXTsKLSAgICAgICAgI2Vsc2UKLSAgICAgICAgbWF0Y2hCeXRlID0gb3V0U3RyZWFtW25vd1BvcyAtIHJlcDBdOwotICAgICAgICAjZW5kaWYKLSAgICAgICAgZG8KLSAgICAgICAgewotICAgICAgICAgIGludCBiaXQ7Ci0gICAgICAgICAgQ1Byb2IgKnByb2JMaXQ7Ci0gICAgICAgICAgbWF0Y2hCeXRlIDw8PSAxOwotICAgICAgICAgIGJpdCA9IChtYXRjaEJ5dGUgJiAweDEwMCk7Ci0gICAgICAgICAgcHJvYkxpdCA9IHByb2IgKyAweDEwMCArIGJpdCArIHN5bWJvbDsKLSAgICAgICAgICBSQ19HRVRfQklUMihwcm9iTGl0LCBzeW1ib2wsIGlmIChiaXQgIT0gMCkgYnJlYWssIGlmIChiaXQgPT0gMCkgYnJlYWspCi0gICAgICAgIH0KLSAgICAgICAgd2hpbGUgKHN5bWJvbCA8IDB4MTAwKTsKLSAgICAgIH0KLSAgICAgIHdoaWxlIChzeW1ib2wgPCAweDEwMCkKLSAgICAgIHsKLSAgICAgICAgQ1Byb2IgKnByb2JMaXQgPSBwcm9iICsgc3ltYm9sOwotICAgICAgICBSQ19HRVRfQklUKHByb2JMaXQsIHN5bWJvbCkKLSAgICAgIH0KLSAgICAgIHByZXZpb3VzQnl0ZSA9IChCeXRlKXN5bWJvbDsKLQotICAgICAgb3V0U3RyZWFtW25vd1BvcysrXSA9IHByZXZpb3VzQnl0ZTsKLSAgICAgICNpZmRlZiBfTFpNQV9PVVRfUkVBRAotICAgICAgaWYgKGRpc3RhbmNlTGltaXQgPCBkaWN0aW9uYXJ5U2l6ZSkKLSAgICAgICAgZGlzdGFuY2VMaW1pdCsrOwotCi0gICAgICBkaWN0aW9uYXJ5W2RpY3Rpb25hcnlQb3NdID0gcHJldmlvdXNCeXRlOwotICAgICAgaWYgKCsrZGljdGlvbmFyeVBvcyA9PSBkaWN0aW9uYXJ5U2l6ZSkKLSAgICAgICAgZGljdGlvbmFyeVBvcyA9IDA7Ci0gICAgICAjZW5kaWYKLSAgICAgIGlmIChzdGF0ZSA8IDQpIHN0YXRlID0gMDsKLSAgICAgIGVsc2UgaWYgKHN0YXRlIDwgMTApIHN0YXRlIC09IDM7Ci0gICAgICBlbHNlIHN0YXRlIC09IDY7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBVcGRhdGVCaXQxKHByb2IpOwotICAgICAgcHJvYiA9IHAgKyBJc1JlcCArIHN0YXRlOwotICAgICAgSWZCaXQwKHByb2IpCi0gICAgICB7Ci0gICAgICAgIFVwZGF0ZUJpdDAocHJvYik7Ci0gICAgICAgIHJlcDMgPSByZXAyOwotICAgICAgICByZXAyID0gcmVwMTsKLSAgICAgICAgcmVwMSA9IHJlcDA7Ci0gICAgICAgIHN0YXRlID0gc3RhdGUgPCBrTnVtTGl0U3RhdGVzID8gMCA6IDM7Ci0gICAgICAgIHByb2IgPSBwICsgTGVuQ29kZXI7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIFVwZGF0ZUJpdDEocHJvYik7Ci0gICAgICAgIHByb2IgPSBwICsgSXNSZXBHMCArIHN0YXRlOwotICAgICAgICBJZkJpdDAocHJvYikKLSAgICAgICAgewotICAgICAgICAgIFVwZGF0ZUJpdDAocHJvYik7Ci0gICAgICAgICAgcHJvYiA9IHAgKyBJc1JlcDBMb25nICsgKHN0YXRlIDw8IGtOdW1Qb3NCaXRzTWF4KSArIHBvc1N0YXRlOwotICAgICAgICAgIElmQml0MChwcm9iKQotICAgICAgICAgIHsKLSAgICAgICAgICAgICNpZmRlZiBfTFpNQV9PVVRfUkVBRAotICAgICAgICAgICAgVUludDMyIHBvczsKLSAgICAgICAgICAgICNlbmRpZgotICAgICAgICAgICAgVXBkYXRlQml0MChwcm9iKTsKLQotICAgICAgICAgICAgI2lmZGVmIF9MWk1BX09VVF9SRUFECi0gICAgICAgICAgICBpZiAoZGlzdGFuY2VMaW1pdCA9PSAwKQotICAgICAgICAgICAgI2Vsc2UKLSAgICAgICAgICAgIGlmIChub3dQb3MgPT0gMCkKLSAgICAgICAgICAgICNlbmRpZgotICAgICAgICAgICAgICByZXR1cm4gTFpNQV9SRVNVTFRfREFUQV9FUlJPUjsKLQotICAgICAgICAgICAgc3RhdGUgPSBzdGF0ZSA8IGtOdW1MaXRTdGF0ZXMgPyA5IDogMTE7Ci0gICAgICAgICAgICAjaWZkZWYgX0xaTUFfT1VUX1JFQUQKLSAgICAgICAgICAgIHBvcyA9IGRpY3Rpb25hcnlQb3MgLSByZXAwOwotICAgICAgICAgICAgaWYgKHBvcyA+PSBkaWN0aW9uYXJ5U2l6ZSkKLSAgICAgICAgICAgICAgcG9zICs9IGRpY3Rpb25hcnlTaXplOwotICAgICAgICAgICAgcHJldmlvdXNCeXRlID0gZGljdGlvbmFyeVtwb3NdOwotICAgICAgICAgICAgZGljdGlvbmFyeVtkaWN0aW9uYXJ5UG9zXSA9IHByZXZpb3VzQnl0ZTsKLSAgICAgICAgICAgIGlmICgrK2RpY3Rpb25hcnlQb3MgPT0gZGljdGlvbmFyeVNpemUpCi0gICAgICAgICAgICAgIGRpY3Rpb25hcnlQb3MgPSAwOwotICAgICAgICAgICAgI2Vsc2UKLSAgICAgICAgICAgIHByZXZpb3VzQnl0ZSA9IG91dFN0cmVhbVtub3dQb3MgLSByZXAwXTsKLSAgICAgICAgICAgICNlbmRpZgotICAgICAgICAgICAgb3V0U3RyZWFtW25vd1BvcysrXSA9IHByZXZpb3VzQnl0ZTsKLSAgICAgICAgICAgICNpZmRlZiBfTFpNQV9PVVRfUkVBRAotICAgICAgICAgICAgaWYgKGRpc3RhbmNlTGltaXQgPCBkaWN0aW9uYXJ5U2l6ZSkKLSAgICAgICAgICAgICAgZGlzdGFuY2VMaW1pdCsrOwotICAgICAgICAgICAgI2VuZGlmCi0KLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgVXBkYXRlQml0MShwcm9iKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgVUludDMyIGRpc3RhbmNlOwotICAgICAgICAgIFVwZGF0ZUJpdDEocHJvYik7Ci0gICAgICAgICAgcHJvYiA9IHAgKyBJc1JlcEcxICsgc3RhdGU7Ci0gICAgICAgICAgSWZCaXQwKHByb2IpCi0gICAgICAgICAgewotICAgICAgICAgICAgVXBkYXRlQml0MChwcm9iKTsKLSAgICAgICAgICAgIGRpc3RhbmNlID0gcmVwMTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIFVwZGF0ZUJpdDEocHJvYik7Ci0gICAgICAgICAgICBwcm9iID0gcCArIElzUmVwRzIgKyBzdGF0ZTsKLSAgICAgICAgICAgIElmQml0MChwcm9iKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBVcGRhdGVCaXQwKHByb2IpOwotICAgICAgICAgICAgICBkaXN0YW5jZSA9IHJlcDI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFVwZGF0ZUJpdDEocHJvYik7Ci0gICAgICAgICAgICAgIGRpc3RhbmNlID0gcmVwMzsKLSAgICAgICAgICAgICAgcmVwMyA9IHJlcDI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXAyID0gcmVwMTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmVwMSA9IHJlcDA7Ci0gICAgICAgICAgcmVwMCA9IGRpc3RhbmNlOwotICAgICAgICB9Ci0gICAgICAgIHN0YXRlID0gc3RhdGUgPCBrTnVtTGl0U3RhdGVzID8gOCA6IDExOwotICAgICAgICBwcm9iID0gcCArIFJlcExlbkNvZGVyOwotICAgICAgfQotICAgICAgewotICAgICAgICBpbnQgbnVtQml0cywgb2Zmc2V0OwotICAgICAgICBDUHJvYiAqcHJvYkxlbiA9IHByb2IgKyBMZW5DaG9pY2U7Ci0gICAgICAgIElmQml0MChwcm9iTGVuKQotICAgICAgICB7Ci0gICAgICAgICAgVXBkYXRlQml0MChwcm9iTGVuKTsKLSAgICAgICAgICBwcm9iTGVuID0gcHJvYiArIExlbkxvdyArIChwb3NTdGF0ZSA8PCBrTGVuTnVtTG93Qml0cyk7Ci0gICAgICAgICAgb2Zmc2V0ID0gMDsKLSAgICAgICAgICBudW1CaXRzID0ga0xlbk51bUxvd0JpdHM7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgVXBkYXRlQml0MShwcm9iTGVuKTsKLSAgICAgICAgICBwcm9iTGVuID0gcHJvYiArIExlbkNob2ljZTI7Ci0gICAgICAgICAgSWZCaXQwKHByb2JMZW4pCi0gICAgICAgICAgewotICAgICAgICAgICAgVXBkYXRlQml0MChwcm9iTGVuKTsKLSAgICAgICAgICAgIHByb2JMZW4gPSBwcm9iICsgTGVuTWlkICsgKHBvc1N0YXRlIDw8IGtMZW5OdW1NaWRCaXRzKTsKLSAgICAgICAgICAgIG9mZnNldCA9IGtMZW5OdW1Mb3dTeW1ib2xzOwotICAgICAgICAgICAgbnVtQml0cyA9IGtMZW5OdW1NaWRCaXRzOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgVXBkYXRlQml0MShwcm9iTGVuKTsKLSAgICAgICAgICAgIHByb2JMZW4gPSBwcm9iICsgTGVuSGlnaDsKLSAgICAgICAgICAgIG9mZnNldCA9IGtMZW5OdW1Mb3dTeW1ib2xzICsga0xlbk51bU1pZFN5bWJvbHM7Ci0gICAgICAgICAgICBudW1CaXRzID0ga0xlbk51bUhpZ2hCaXRzOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBSYW5nZURlY29kZXJCaXRUcmVlRGVjb2RlKHByb2JMZW4sIG51bUJpdHMsIGxlbik7Ci0gICAgICAgIGxlbiArPSBvZmZzZXQ7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChzdGF0ZSA8IDQpCi0gICAgICB7Ci0gICAgICAgIGludCBwb3NTbG90OwotICAgICAgICBzdGF0ZSArPSBrTnVtTGl0U3RhdGVzOwotICAgICAgICBwcm9iID0gcCArIFBvc1Nsb3QgKwotICAgICAgICAgICAgKChsZW4gPCBrTnVtTGVuVG9Qb3NTdGF0ZXMgPyBsZW4gOiBrTnVtTGVuVG9Qb3NTdGF0ZXMgLSAxKSA8PAotICAgICAgICAgICAga051bVBvc1Nsb3RCaXRzKTsKLSAgICAgICAgUmFuZ2VEZWNvZGVyQml0VHJlZURlY29kZShwcm9iLCBrTnVtUG9zU2xvdEJpdHMsIHBvc1Nsb3QpOwotICAgICAgICBpZiAocG9zU2xvdCA+PSBrU3RhcnRQb3NNb2RlbEluZGV4KQotICAgICAgICB7Ci0gICAgICAgICAgaW50IG51bURpcmVjdEJpdHMgPSAoKHBvc1Nsb3QgPj4gMSkgLSAxKTsKLSAgICAgICAgICByZXAwID0gKDIgfCAoKFVJbnQzMilwb3NTbG90ICYgMSkpOwotICAgICAgICAgIGlmIChwb3NTbG90IDwga0VuZFBvc01vZGVsSW5kZXgpCi0gICAgICAgICAgewotICAgICAgICAgICAgcmVwMCA8PD0gbnVtRGlyZWN0Qml0czsKLSAgICAgICAgICAgIHByb2IgPSBwICsgU3BlY1BvcyArIHJlcDAgLSBwb3NTbG90IC0gMTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG51bURpcmVjdEJpdHMgLT0ga051bUFsaWduQml0czsKLSAgICAgICAgICAgIGRvCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIFJDX05PUk1BTElaRQotICAgICAgICAgICAgICBSYW5nZSA+Pj0gMTsKLSAgICAgICAgICAgICAgcmVwMCA8PD0gMTsKLSAgICAgICAgICAgICAgaWYgKENvZGUgPj0gUmFuZ2UpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBDb2RlIC09IFJhbmdlOwotICAgICAgICAgICAgICAgIHJlcDAgfD0gMTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgd2hpbGUgKC0tbnVtRGlyZWN0Qml0cyAhPSAwKTsKLSAgICAgICAgICAgIHByb2IgPSBwICsgQWxpZ247Ci0gICAgICAgICAgICByZXAwIDw8PSBrTnVtQWxpZ25CaXRzOwotICAgICAgICAgICAgbnVtRGlyZWN0Qml0cyA9IGtOdW1BbGlnbkJpdHM7Ci0gICAgICAgICAgfQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGludCBpID0gMTsKLSAgICAgICAgICAgIGludCBtaSA9IDE7Ci0gICAgICAgICAgICBkbwotICAgICAgICAgICAgewotICAgICAgICAgICAgICBDUHJvYiAqcHJvYjMgPSBwcm9iICsgbWk7Ci0gICAgICAgICAgICAgIFJDX0dFVF9CSVQyKHByb2IzLCBtaSwgOyAsIHJlcDAgfD0gaSk7Ci0gICAgICAgICAgICAgIGkgPDw9IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB3aGlsZSgtLW51bURpcmVjdEJpdHMgIT0gMCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICByZXAwID0gcG9zU2xvdDsKLSAgICAgICAgaWYgKCsrcmVwMCA9PSAoVUludDMyKSgwKSkKLSAgICAgICAgewotICAgICAgICAgIC8qIGl0J3MgZm9yIHN0cmVhbSB2ZXJzaW9uICovCi0gICAgICAgICAgbGVuID0ga0x6bWFTdHJlYW1XYXNGaW5pc2hlZElkOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGxlbiArPSBrTWF0Y2hNaW5MZW47Ci0gICAgICAjaWZkZWYgX0xaTUFfT1VUX1JFQUQKLSAgICAgIGlmIChyZXAwID4gZGlzdGFuY2VMaW1pdCkKLSAgICAgICNlbHNlCi0gICAgICBpZiAocmVwMCA+IG5vd1BvcykKLSAgICAgICNlbmRpZgotICAgICAgICByZXR1cm4gTFpNQV9SRVNVTFRfREFUQV9FUlJPUjsKLQotICAgICAgI2lmZGVmIF9MWk1BX09VVF9SRUFECi0gICAgICBpZiAoZGljdGlvbmFyeVNpemUgLSBkaXN0YW5jZUxpbWl0ID4gKFVJbnQzMilsZW4pCi0gICAgICAgIGRpc3RhbmNlTGltaXQgKz0gbGVuOwotICAgICAgZWxzZQotICAgICAgICBkaXN0YW5jZUxpbWl0ID0gZGljdGlvbmFyeVNpemU7Ci0gICAgICAjZW5kaWYKLQotICAgICAgZG8KLSAgICAgIHsKLSAgICAgICAgI2lmZGVmIF9MWk1BX09VVF9SRUFECi0gICAgICAgIFVJbnQzMiBwb3MgPSBkaWN0aW9uYXJ5UG9zIC0gcmVwMDsKLSAgICAgICAgaWYgKHBvcyA+PSBkaWN0aW9uYXJ5U2l6ZSkKLSAgICAgICAgICBwb3MgKz0gZGljdGlvbmFyeVNpemU7Ci0gICAgICAgIHByZXZpb3VzQnl0ZSA9IGRpY3Rpb25hcnlbcG9zXTsKLSAgICAgICAgZGljdGlvbmFyeVtkaWN0aW9uYXJ5UG9zXSA9IHByZXZpb3VzQnl0ZTsKLSAgICAgICAgaWYgKCsrZGljdGlvbmFyeVBvcyA9PSBkaWN0aW9uYXJ5U2l6ZSkKLSAgICAgICAgICBkaWN0aW9uYXJ5UG9zID0gMDsKLSAgICAgICAgI2Vsc2UKLSAgICAgICAgcHJldmlvdXNCeXRlID0gb3V0U3RyZWFtW25vd1BvcyAtIHJlcDBdOwotICAgICAgICAjZW5kaWYKLSAgICAgICAgbGVuLS07Ci0gICAgICAgIG91dFN0cmVhbVtub3dQb3MrK10gPSBwcmV2aW91c0J5dGU7Ci0gICAgICB9Ci0gICAgICB3aGlsZShsZW4gIT0gMCAmJiBub3dQb3MgPCBvdXRTaXplKTsKLSAgICB9Ci0gIH0KLSAgUkNfTk9STUFMSVpFOwotCi0gICNpZmRlZiBfTFpNQV9PVVRfUkVBRAotICB2cy0+UmFuZ2UgPSBSYW5nZTsKLSAgdnMtPkNvZGUgPSBDb2RlOwotICB2cy0+RGljdGlvbmFyeVBvcyA9IGRpY3Rpb25hcnlQb3M7Ci0gIHZzLT5HbG9iYWxQb3MgPSBnbG9iYWxQb3MgKyAoVUludDMyKW5vd1BvczsKLSAgdnMtPkRpc3RhbmNlTGltaXQgPSBkaXN0YW5jZUxpbWl0OwotICB2cy0+UmVwc1swXSA9IHJlcDA7Ci0gIHZzLT5SZXBzWzFdID0gcmVwMTsKLSAgdnMtPlJlcHNbMl0gPSByZXAyOwotICB2cy0+UmVwc1szXSA9IHJlcDM7Ci0gIHZzLT5TdGF0ZSA9IHN0YXRlOwotICB2cy0+UmVtYWluTGVuID0gbGVuOwotICB2cy0+VGVtcERpY3Rpb25hcnlbMF0gPSB0ZW1wRGljdGlvbmFyeVswXTsKLSAgI2VuZGlmCi0KLSAgI2lmZGVmIF9MWk1BX0lOX0NCCi0gIHZzLT5CdWZmZXIgPSBCdWZmZXI7Ci0gIHZzLT5CdWZmZXJMaW0gPSBCdWZmZXJMaW07Ci0gICNlbHNlCi0gICppblNpemVQcm9jZXNzZWQgPSAoU2l6ZVQpKEJ1ZmZlciAtIGluU3RyZWFtKTsKLSAgI2VuZGlmCi0gICpvdXRTaXplUHJvY2Vzc2VkID0gbm93UG9zOwotICByZXR1cm4gTFpNQV9SRVNVTFRfT0s7Ci19CmRpZmYgLS1naXQgYS9saWJfZ2VuZXJpYy9sem1hL0x6bWFEZWNvZGUuaCBiL2xpYl9nZW5lcmljL2x6bWEvTHptYURlY29kZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDc1NTI1Li4wMDAwMDAwCi0tLSBhL2xpYl9nZW5lcmljL2x6bWEvTHptYURlY29kZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLS8qCi0gIEx6bWFEZWNvZGUuaAotICBMWk1BIERlY29kZXIgaW50ZXJmYWNlCi0KLSAgTFpNQSBTREsgNC40MCBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNiBJZ29yIFBhdmxvdiAoMjAwNi0wNS0wMSkKLSAgaHR0cDovL3d3dy43LXppcC5vcmcvCi0KLSAgTFpNQSBTREsgaXMgbGljZW5zZWQgdW5kZXIgdHdvIGxpY2Vuc2VzOgotICAxKSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdOVSBMR1BMKQotICAyKSBDb21tb24gUHVibGljIExpY2Vuc2UgKENQTCkKLSAgSXQgbWVhbnMgdGhhdCB5b3UgY2FuIHNlbGVjdCBvbmUgb2YgdGhlc2UgdHdvIGxpY2Vuc2VzIGFuZAotICBmb2xsb3cgcnVsZXMgb2YgdGhhdCBsaWNlbnNlLgotCi0gIFNQRUNJQUwgRVhDRVBUSU9OOgotICBJZ29yIFBhdmxvdiwgYXMgdGhlIGF1dGhvciBvZiB0aGlzIGNvZGUsIGV4cHJlc3NseSBwZXJtaXRzIHlvdSB0bwotICBzdGF0aWNhbGx5IG9yIGR5bmFtaWNhbGx5IGxpbmsgeW91ciBjb2RlIChvciBiaW5kIGJ5IG5hbWUpIHRvIHRoZQotICBpbnRlcmZhY2VzIG9mIHRoaXMgZmlsZSB3aXRob3V0IHN1YmplY3RpbmcgeW91ciBsaW5rZWQgY29kZSB0byB0aGUKLSAgdGVybXMgb2YgdGhlIENQTCBvciBHTlUgTEdQTC4gQW55IG1vZGlmaWNhdGlvbnMgb3IgYWRkaXRpb25zCi0gIHRvIHRoaXMgZmlsZSwgaG93ZXZlciwgYXJlIHN1YmplY3QgdG8gdGhlIExHUEwgb3IgQ1BMIHRlcm1zLgotKi8KLQotI2lmbmRlZiBfX0xaTUFERUNPREVfSAotI2RlZmluZSBfX0xaTUFERUNPREVfSAotCi0jaW5jbHVkZSAiTHptYVR5cGVzLmgiCi0KLS8qICNkZWZpbmUgX0xaTUFfSU5fQ0IgKi8KLS8qIFVzZSBjYWxsYmFjayBmb3IgaW5wdXQgZGF0YSAqLwotCi0vKiAjZGVmaW5lIF9MWk1BX09VVF9SRUFEICovCi0vKiBVc2UgcmVhZCBmdW5jdGlvbiBmb3Igb3V0cHV0IGRhdGEgKi8KLQotLyogI2RlZmluZSBfTFpNQV9QUk9CMzIgKi8KLS8qIEl0IGNhbiBpbmNyZWFzZSBzcGVlZCBvbiBzb21lIDMyLWJpdCBDUFVzLAotICAgYnV0IG1lbW9yeSB1c2FnZSB3aWxsIGJlIGRvdWJsZWQgaW4gdGhhdCBjYXNlICovCi0KLS8qICNkZWZpbmUgX0xaTUFfTE9DX09QVCAqLwotLyogRW5hYmxlIGxvY2FsIHNwZWVkIG9wdGltaXphdGlvbnMgaW5zaWRlIGNvZGUgKi8KLQotI2lmZGVmIF9MWk1BX1BST0IzMgotI2RlZmluZSBDUHJvYiBVSW50MzIKLSNlbHNlCi0jZGVmaW5lIENQcm9iIFVJbnQxNgotI2VuZGlmCi0KLSNkZWZpbmUgTFpNQV9SRVNVTFRfT0sgMAotI2RlZmluZSBMWk1BX1JFU1VMVF9EQVRBX0VSUk9SIDEKLQotI2lmZGVmIF9MWk1BX0lOX0NCCi10eXBlZGVmIHN0cnVjdCBfSUx6bWFJbkNhbGxiYWNrCi17Ci0gIGludCAoKlJlYWQpKHZvaWQgKm9iamVjdCwgY29uc3QgdW5zaWduZWQgY2hhciAqKmJ1ZmZlciwgU2l6ZVQgKmJ1ZmZlclNpemUpOwotfSBJTHptYUluQ2FsbGJhY2s7Ci0jZW5kaWYKLQotI2RlZmluZSBMWk1BX0JBU0VfU0laRSAxODQ2Ci0jZGVmaW5lIExaTUFfTElUX1NJWkUgNzY4Ci0KLSNkZWZpbmUgTFpNQV9QUk9QRVJUSUVTX1NJWkUgNQotCi10eXBlZGVmIHN0cnVjdCBfQ0x6bWFQcm9wZXJ0aWVzCi17Ci0gIGludCBsYzsKLSAgaW50IGxwOwotICBpbnQgcGI7Ci0gICNpZmRlZiBfTFpNQV9PVVRfUkVBRAotICBVSW50MzIgRGljdGlvbmFyeVNpemU7Ci0gICNlbmRpZgotfUNMem1hUHJvcGVydGllczsKLQotaW50IEx6bWFEZWNvZGVQcm9wZXJ0aWVzKENMem1hUHJvcGVydGllcyAqcHJvcHNSZXMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnByb3BzRGF0YSwgaW50IHNpemUpOwotCi0jZGVmaW5lIEx6bWFHZXROdW1Qcm9icyhQcm9wZXJ0aWVzKSAoTFpNQV9CQVNFX1NJWkUgKyAoTFpNQV9MSVRfU0laRSA8PCAoKFByb3BlcnRpZXMpLT5sYyArIChQcm9wZXJ0aWVzKS0+bHApKSkKLQotI2RlZmluZSBrTHptYU5lZWRJbml0SWQgKC0yKQotCi10eXBlZGVmIHN0cnVjdCBfQ0x6bWFEZWNvZGVyU3RhdGUKLXsKLSAgQ0x6bWFQcm9wZXJ0aWVzIFByb3BlcnRpZXM7Ci0gIENQcm9iICpQcm9iczsKLQotICAjaWZkZWYgX0xaTUFfSU5fQ0IKLSAgY29uc3QgdW5zaWduZWQgY2hhciAqQnVmZmVyOwotICBjb25zdCB1bnNpZ25lZCBjaGFyICpCdWZmZXJMaW07Ci0gICNlbmRpZgotCi0gICNpZmRlZiBfTFpNQV9PVVRfUkVBRAotICB1bnNpZ25lZCBjaGFyICpEaWN0aW9uYXJ5OwotICBVSW50MzIgUmFuZ2U7Ci0gIFVJbnQzMiBDb2RlOwotICBVSW50MzIgRGljdGlvbmFyeVBvczsKLSAgVUludDMyIEdsb2JhbFBvczsKLSAgVUludDMyIERpc3RhbmNlTGltaXQ7Ci0gIFVJbnQzMiBSZXBzWzRdOwotICBpbnQgU3RhdGU7Ci0gIGludCBSZW1haW5MZW47Ci0gIHVuc2lnbmVkIGNoYXIgVGVtcERpY3Rpb25hcnlbNF07Ci0gICNlbmRpZgotfSBDTHptYURlY29kZXJTdGF0ZTsKLQotI2lmZGVmIF9MWk1BX09VVF9SRUFECi0jZGVmaW5lIEx6bWFEZWNvZGVySW5pdCh2cykgeyAodnMpLT5SZW1haW5MZW4gPSBrTHptYU5lZWRJbml0SWQ7IH0KLSNlbmRpZgotCi1pbnQgTHptYURlY29kZShDTHptYURlY29kZXJTdGF0ZSAqdnMsCi0gICAgI2lmZGVmIF9MWk1BX0lOX0NCCi0gICAgSUx6bWFJbkNhbGxiYWNrICppbkNhbGxiYWNrLAotICAgICNlbHNlCi0gICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5TdHJlYW0sIFNpemVUIGluU2l6ZSwgU2l6ZVQgKmluU2l6ZVByb2Nlc3NlZCwKLSAgICAjZW5kaWYKLSAgICB1bnNpZ25lZCBjaGFyICpvdXRTdHJlYW0sIFNpemVUIG91dFNpemUsIFNpemVUICpvdXRTaXplUHJvY2Vzc2VkKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9saWJfZ2VuZXJpYy9sem1hL0x6bWFUb29scy5jIGIvbGliX2dlbmVyaWMvbHptYS9Mem1hVG9vbHMuYwppbmRleCA1YWM0MmU1Li5jMmE5MWU1IDEwMDY0NAotLS0gYS9saWJfZ2VuZXJpYy9sem1hL0x6bWFUb29scy5jCisrKyBiL2xpYl9nZW5lcmljL2x6bWEvTHptYVRvb2xzLmMKQEAgLTEsNyArMSw3IEBACiAvKgotICogVXNlZnVscyByb3V0aW5lcyBiYXNlZCBvbiB0aGUgTHptYVRlc3QuYyBmaWxlIGZyb20gTFpNQSBTREsgNC41NworICogVXNlZnVscyByb3V0aW5lcyBiYXNlZCBvbiB0aGUgTHptYVRlc3QuYyBmaWxlIGZyb20gTFpNQSBTREsgNC42NQogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IEluZHVzdHJpZSBEaWFsIEZhY2UgUy5wLkEuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBJbmR1c3RyaWUgRGlhbCBGYWNlIFMucC5BLgogICogTHVpZ2kgJ0NvbWlvJyBNYW50ZWxsaW5pIChsdWlnaS5tYW50ZWxsaW5pQGlkZi1oaXQuY29tKQogICoKICAqIENvcHlyaWdodCAoQykgMTk5OS0yMDA1IElnb3IgUGF2bG92CkBAIC00MCwxMDMgKzQwLDg4IEBACiAjaWZkZWYgQ09ORklHX0xaTUEKIAogI2RlZmluZSBMWk1BX1BST1BFUlRJRVNfT0ZGU0VUIDAKLSNkZWZpbmUgTFpNQV9TSVpFX09GRlNFVCAgICAgICBMWk1BX1BST1BFUlRJRVNfU0laRQorI2RlZmluZSBMWk1BX1NJWkVfT0ZGU0VUICAgICAgIExaTUFfUFJPUFNfU0laRQogI2RlZmluZSBMWk1BX0RBVEFfT0ZGU0VUICAgICAgIExaTUFfU0laRV9PRkZTRVQrc2l6ZW9mKHVpbnQ2NF90KQogCiAjaW5jbHVkZSAiTHptYVRvb2xzLmgiCi0jaW5jbHVkZSAiTHptYURlY29kZS5oIgorI2luY2x1ZGUgIkx6bWFEZWMuaCIKIAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPG1hbGxvYy5oPgogCitzdGF0aWMgdm9pZCAqU3pBbGxvYyh2b2lkICpwLCBzaXplX3Qgc2l6ZSkgeyBwID0gcDsgcmV0dXJuIG1hbGxvYyhzaXplKTsgfQorc3RhdGljIHZvaWQgU3pGcmVlKHZvaWQgKnAsIHZvaWQgKmFkZHJlc3MpIHsgcCA9IHA7IGZyZWUoYWRkcmVzcyk7IH0KKwogaW50IGx6bWFCdWZmVG9CdWZmRGVjb21wcmVzcyAodW5zaWduZWQgY2hhciAqb3V0U3RyZWFtLCBTaXplVCAqdW5jb21wcmVzc2VkU2l6ZSwKLQkJCSAgICAgIHVuc2lnbmVkIGNoYXIgKmluU3RyZWFtLCAgU2l6ZVQgIGxlbmd0aCkKKyAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmluU3RyZWFtLCAgU2l6ZVQgIGxlbmd0aCkKIHsKLQlpbnQgcmVzID0gTFpNQV9SRVNVTFRfREFUQV9FUlJPUjsKLQlpbnQgaTsKKyAgICBpbnQgcmVzID0gU1pfRVJST1JfREFUQTsKKyAgICBpbnQgaTsKKyAgICBJU3pBbGxvYyBnX0FsbG9jOwogCi0JU2l6ZVQgb3V0U2l6ZUZ1bGwgPSAweEZGRkZGRkZGOyAvKiA0R0J5dGVzIGxpbWl0ICovCi0JU2l6ZVQgaW5Qcm9jZXNzZWQ7Ci0JU2l6ZVQgb3V0UHJvY2Vzc2VkOwotCVNpemVUIG91dFNpemU7Ci0JU2l6ZVQgb3V0U2l6ZUhpZ2g7Ci0JQ0x6bWFEZWNvZGVyU3RhdGUgc3RhdGU7ICAvKiBpdCdzIGFib3V0IDI0LTgwIGJ5dGVzIHN0cnVjdHVyZSwgaWYgaW50IGlzIDMyLWJpdCAqLwotCXVuc2lnbmVkIGNoYXIgcHJvcGVydGllc1tMWk1BX1BST1BFUlRJRVNfU0laRV07Ci0JU2l6ZVQgY29tcHJlc3NlZFNpemUgPSAoU2l6ZVQpKGxlbmd0aCAtIExaTUFfREFUQV9PRkZTRVQpOworICAgIFNpemVUIG91dFNpemVGdWxsID0gMHhGRkZGRkZGRjsgLyogNEdCeXRlcyBsaW1pdCAqLworICAgIFNpemVUIGluUHJvY2Vzc2VkOworICAgIFNpemVUIG91dFByb2Nlc3NlZDsKKyAgICBTaXplVCBvdXRTaXplOworICAgIFNpemVUIG91dFNpemVIaWdoOworICAgIEVMem1hU3RhdHVzIHN0YXRlOworICAgIFNpemVUIGNvbXByZXNzZWRTaXplID0gKFNpemVUKShsZW5ndGggLSBMWk1BX1BST1BTX1NJWkUpOwogCi0JZGVidWcgKCJMWk1BOiBJbWFnZSBhZGRyZXNzLi4uLi4uLi4uLi4uLi4uIDB4JWx4XG4iLCBpblN0cmVhbSk7Ci0JZGVidWcgKCJMWk1BOiBQcm9wZXJ0aWVzIGFkZHJlc3MuLi4uLi4uLi4uIDB4JWx4XG4iLCBpblN0cmVhbSArIExaTUFfUFJPUEVSVElFU19PRkZTRVQpOwotCWRlYnVnICgiTFpNQTogVW5jb21wcmVzc2VkIHNpemUgYWRkcmVzcy4uLiAweCVseFxuIiwgaW5TdHJlYW0gKyBMWk1BX1NJWkVfT0ZGU0VUKTsKLQlkZWJ1ZyAoIkxaTUE6IENvbXByZXNzZWQgZGF0YSBhZGRyZXNzLi4uLi4gMHglbHhcbiIsIGluU3RyZWFtICsgTFpNQV9EQVRBX09GRlNFVCk7Ci0JZGVidWcgKCJMWk1BOiBEZXN0aW5hdGlvbiBhZGRyZXNzLi4uLi4uLi4uIDB4JWx4XG4iLCBvdXRTdHJlYW0pOworICAgIGRlYnVnICgiTFpNQTogSW1hZ2UgYWRkcmVzcy4uLi4uLi4uLi4uLi4uLiAweCVseFxuIiwgaW5TdHJlYW0pOworICAgIGRlYnVnICgiTFpNQTogUHJvcGVydGllcyBhZGRyZXNzLi4uLi4uLi4uLiAweCVseFxuIiwgaW5TdHJlYW0gKyBMWk1BX1BST1BFUlRJRVNfT0ZGU0VUKTsKKyAgICBkZWJ1ZyAoIkxaTUE6IFVuY29tcHJlc3NlZCBzaXplIGFkZHJlc3MuLi4gMHglbHhcbiIsIGluU3RyZWFtICsgTFpNQV9TSVpFX09GRlNFVCk7CisgICAgZGVidWcgKCJMWk1BOiBDb21wcmVzc2VkIGRhdGEgYWRkcmVzcy4uLi4uIDB4JWx4XG4iLCBpblN0cmVhbSArIExaTUFfREFUQV9PRkZTRVQpOworICAgIGRlYnVnICgiTFpNQTogRGVzdGluYXRpb24gYWRkcmVzcy4uLi4uLi4uLiAweCVseFxuIiwgb3V0U3RyZWFtKTsKIAotCW1lbWNweShwcm9wZXJ0aWVzLCBpblN0cmVhbSArIExaTUFfUFJPUEVSVElFU19PRkZTRVQsIExaTUFfUFJPUEVSVElFU19TSVpFKTsKKyAgICBtZW1zZXQoJnN0YXRlLCAwLCBzaXplb2Yoc3RhdGUpKTsKIAotCW1lbXNldCgmc3RhdGUsIDAsIHNpemVvZihzdGF0ZSkpOwotCXJlcyA9IEx6bWFEZWNvZGVQcm9wZXJ0aWVzKCZzdGF0ZS5Qcm9wZXJ0aWVzLAotCQkJCSBwcm9wZXJ0aWVzLAotCQkJCSBMWk1BX1BST1BFUlRJRVNfU0laRSk7Ci0JaWYgKHJlcyAhPSBMWk1BX1JFU1VMVF9PSykgewotCQlyZXR1cm4gcmVzOwotCX0KKyAgICBvdXRTaXplID0gMDsKKyAgICBvdXRTaXplSGlnaCA9IDA7CisgICAgLyogUmVhZCB0aGUgdW5jb21wcmVzc2VkIHNpemUgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgYiA9IGluU3RyZWFtW0xaTUFfU0laRV9PRkZTRVQgKyBpXTsKKyAgICAgICAgICAgIGlmIChpIDwgNCkgeworICAgICAgICAgICAgICAgIG91dFNpemUgICAgICs9IChVSW50MzIpKGIpIDw8IChpICogOCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgb3V0U2l6ZUhpZ2ggKz0gKFVJbnQzMikoYikgPDwgKChpIC0gNCkgKiA4KTsKKyAgICAgICAgfQorICAgIH0KIAotCW91dFNpemUgPSAwOwotCW91dFNpemVIaWdoID0gMDsKLQkvKiBSZWFkIHRoZSB1bmNvbXByZXNzZWQgc2l6ZSAqLwotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkJdW5zaWduZWQgY2hhciBiID0gaW5TdHJlYW1bTFpNQV9TSVpFX09GRlNFVCArIGldOwotCSAgICAgICAgaWYgKGkgPCA0KSB7Ci0JCSAgICAgICAgb3V0U2l6ZSAgICAgKz0gKFVJbnQzMikoYikgPDwgKGkgKiA4KTsKLQkJfSBlbHNlIHsKLQkgICAgICAgICAgICAgICAgb3V0U2l6ZUhpZ2ggKz0gKFVJbnQzMikoYikgPDwgKChpIC0gNCkgKiA4KTsKLQkJfQotCX0KKyAgICBvdXRTaXplRnVsbCA9IChTaXplVClvdXRTaXplOworICAgIGlmIChzaXplb2YoU2l6ZVQpID49IDgpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogU2l6ZVQgaXMgYSA2NCBiaXQgdWludCA9PiBXZSBjYW4gbWFuYWdlIGZpbGVzIGxhcmdlciB0aGFuIDRHQiEKKyAgICAgICAgICoKKyAgICAgICAgICovCisgICAgICAgICAgICBvdXRTaXplRnVsbCB8PSAoKChTaXplVClvdXRTaXplSGlnaCA8PCAxNikgPDwgMTYpOworICAgIH0gZWxzZSBpZiAob3V0U2l6ZUhpZ2ggIT0gMCB8fCAoVUludDMyKShTaXplVClvdXRTaXplICE9IG91dFNpemUpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogU2l6ZVQgaXMgYSAzMiBiaXQgdWludCA9PiBXZSBjYW5ub3QgbWFuYWdlIGZpbGVzIGxhcmdlciB0aGFuCisgICAgICAgICAqIDRHQiEKKyAgICAgICAgICoKKyAgICAgICAgICovCisgICAgICAgIGRlYnVnICgiTFpNQTogNjRiaXQgc3VwcG9ydCBub3QgZW5hYmxlZC5cbiIpOworICAgICAgICByZXR1cm4gU1pfRVJST1JfREFUQTsKKyAgICB9CiAKLQlvdXRTaXplRnVsbCA9IChTaXplVClvdXRTaXplOwotCWlmIChzaXplb2YoU2l6ZVQpID49IDgpIHsKLQkJLyoKLQkgICAgICAgICAqIFNpemVUIGlzIGEgNjQgYml0IHVpbnQgPT4gV2UgY2FuIG1hbmFnZSBmaWxlcyBsYXJnZXIgdGhhbiA0R0IhCi0JCSAqCi0JCSAqLwotCSAgICAgICAgb3V0U2l6ZUZ1bGwgfD0gKCgoU2l6ZVQpb3V0U2l6ZUhpZ2ggPDwgMTYpIDw8IDE2KTsKLQl9IGVsc2UgaWYgKG91dFNpemVIaWdoICE9IDAgfHwgKFVJbnQzMikoU2l6ZVQpb3V0U2l6ZSAhPSBvdXRTaXplKSB7Ci0JICAgICAgICAvKgotCQkgKiBTaXplVCBpcyBhIDMyIGJpdCB1aW50ID0+IFdlIGNhbm5vdCBtYW5hZ2UgZmlsZXMgbGFyZ2VyIHRoYW4KLQkJICogNEdCIQotCQkgKgotCQkgKi8KLQkJZGVidWcgKCJMWk1BOiA2NGJpdCBzdXBwb3J0IG5vdCBlbmFibGVkLlxuIik7Ci0JICAgICAgICByZXR1cm4gTFpNQV9SRVNVTFRfREFUQV9FUlJPUjsKLQl9CisgICAgZGVidWcgKCJMWk1BOiBVbmNvbXByZXNlZCBzaXplLi4uLi4uLi4uLi4uIDB4JWx4XG4iLCBvdXRTaXplRnVsbCk7CisgICAgZGVidWcgKCJMWk1BOiBDb21wcmVzZWQgc2l6ZS4uLi4uLi4uLi4uLi4uIDB4JWx4XG4iLCBjb21wcmVzc2VkU2l6ZSk7CiAKLQlkZWJ1ZyAoIkxaTUE6IFVuY29tcHJlc2VkIHNpemUuLi4uLi4uLi4uLi4gMHglbHhcbiIsIG91dFNpemVGdWxsKTsKLQlkZWJ1ZyAoIkxaTUE6IENvbXByZXNlZCBzaXplLi4uLi4uLi4uLi4uLi4gMHglbHhcbiIsIGNvbXByZXNzZWRTaXplKTsKLQlkZWJ1ZyAoIkxaTUE6IER5bmFtaWMgbWVtb3J5IG5lZWRlZC4uLi4uLi4gMHglbHgiLCBMem1hR2V0TnVtUHJvYnMoJnN0YXRlLlByb3BlcnRpZXMpICogc2l6ZW9mKENQcm9iKSk7CisgICAgZ19BbGxvYy5BbGxvYyA9IFN6QWxsb2M7CisgICAgZ19BbGxvYy5GcmVlID0gU3pGcmVlOwogCi0Jc3RhdGUuUHJvYnMgPSAoQ1Byb2IgKiltYWxsb2MoTHptYUdldE51bVByb2JzKCZzdGF0ZS5Qcm9wZXJ0aWVzKSAqIHNpemVvZihDUHJvYikpOworICAgIC8qIERlY29tcHJlc3MgKi8KKyAgICBvdXRQcm9jZXNzZWQgPSBvdXRTaXplRnVsbDsKKyAgICByZXMgPSBMem1hRGVjb2RlKAorICAgICAgICBvdXRTdHJlYW0sICZvdXRQcm9jZXNzZWQsCisgICAgICAgIGluU3RyZWFtICsgTFpNQV9EQVRBX09GRlNFVCwgJmNvbXByZXNzZWRTaXplLAorICAgICAgICBpblN0cmVhbSwgTFpNQV9QUk9QU19TSVpFLCBMWk1BX0ZJTklTSF9BTlksICZzdGF0ZSwgJmdfQWxsb2MpOworICAgICp1bmNvbXByZXNzZWRTaXplID0gb3V0UHJvY2Vzc2VkOworICAgIGlmIChyZXMgIT0gU1pfT0spICB7CisgICAgICAgIHJldHVybiByZXM7CisgICAgfQogCi0JaWYgKHN0YXRlLlByb2JzID09IDAKLQkgICAgfHwgKG91dFN0cmVhbSA9PSAwICYmIG91dFNpemVGdWxsICE9IDApCi0JICAgIHx8IChpblN0cmVhbSA9PSAwICYmIGNvbXByZXNzZWRTaXplICE9IDApKSB7Ci0JCWZyZWUoc3RhdGUuUHJvYnMpOwotCQlkZWJ1ZyAoIlxuIik7Ci0JCXJldHVybiBMWk1BX1JFU1VMVF9EQVRBX0VSUk9SOwotCX0KLQotCWRlYnVnICgiIGFsbG9jYXRlZC5cbiIpOwotCi0JLyogRGVjb21wcmVzcyAqLwotCi0JcmVzID0gTHptYURlY29kZSgmc3RhdGUsCi0JCWluU3RyZWFtICsgTFpNQV9EQVRBX09GRlNFVCwgY29tcHJlc3NlZFNpemUsICZpblByb2Nlc3NlZCwKLQkJb3V0U3RyZWFtLCBvdXRTaXplRnVsbCwgICZvdXRQcm9jZXNzZWQpOwotCWlmIChyZXMgIT0gTFpNQV9SRVNVTFRfT0spICB7Ci0JCXJldHVybiByZXM7Ci0JfQotCi0JKnVuY29tcHJlc3NlZFNpemUgPSBvdXRQcm9jZXNzZWQ7Ci0JZnJlZShzdGF0ZS5Qcm9icyk7Ci0JcmV0dXJuIHJlczsKKyAgICByZXR1cm4gcmVzOwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYl9nZW5lcmljL2x6bWEvTHptYVRvb2xzLmggYi9saWJfZ2VuZXJpYy9sem1hL0x6bWFUb29scy5oCmluZGV4IGM5MWZiODkuLjJkYjgwZmMgMTAwNjQ0Ci0tLSBhL2xpYl9nZW5lcmljL2x6bWEvTHptYVRvb2xzLmgKKysrIGIvbGliX2dlbmVyaWMvbHptYS9Mem1hVG9vbHMuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBVc2VmdWxzIHJvdXRpbmVzIGJhc2VkIG9uIHRoZSBMem1hVGVzdC5jIGZpbGUgZnJvbSBMWk1BIFNESyA0LjU3CisgKiBVc2VmdWxzIHJvdXRpbmVzIGJhc2VkIG9uIHRoZSBMem1hVGVzdC5jIGZpbGUgZnJvbSBMWk1BIFNESyA0LjY1CiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggSW5kdXN0cmllIERpYWwgRmFjZSBTLnAuQS4KICAqIEx1aWdpICdDb21pbycgTWFudGVsbGluaSAobHVpZ2kubWFudGVsbGluaUBpZGYtaGl0LmNvbSkKQEAgLTI4LDcgKzI4LDcgQEAKICNpZm5kZWYgX19MWk1BX1RPT0xfSF9fCiAjZGVmaW5lIF9fTFpNQV9UT09MX0hfXwogCi0jaW5jbHVkZSAiTHptYVR5cGVzLmgiCisjaW5jbHVkZSA8bHptYS9Mem1hVHlwZXMuaD4KIAogZXh0ZXJuIGludCBsem1hQnVmZlRvQnVmZkRlY29tcHJlc3MgKHVuc2lnbmVkIGNoYXIgKm91dFN0cmVhbSwgU2l6ZVQgKnVuY29tcHJlc3NlZFNpemUsCiAJCQkgICAgICB1bnNpZ25lZCBjaGFyICppblN0cmVhbSwgIFNpemVUICBsZW5ndGgpOwpkaWZmIC0tZ2l0IGEvbGliX2dlbmVyaWMvbHptYS9Mem1hVHlwZXMuaCBiL2xpYl9nZW5lcmljL2x6bWEvTHptYVR5cGVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzZjk2ZjQuLjAwMDAwMDAKLS0tIGEvbGliX2dlbmVyaWMvbHptYS9Mem1hVHlwZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLS8qCi1Mem1hVHlwZXMuaAotCi1UeXBlcyBmb3IgTFpNQSBEZWNvZGVyCi0KLVRoaXMgZmlsZSB3cml0dGVuIGFuZCBkaXN0cmlidXRlZCB0byBwdWJsaWMgZG9tYWluIGJ5IElnb3IgUGF2bG92LgotVGhpcyBmaWxlIGlzIHBhcnQgb2YgTFpNQSBTREsgNC40MCAoMjAwNi0wNS0wMSkKLSovCi0KLSNpZm5kZWYgX19MWk1BVFlQRVNfSAotI2RlZmluZSBfX0xaTUFUWVBFU19ICi0KLSNpZm5kZWYgXzdaSVBfQllURV9ERUZJTkVECi0jZGVmaW5lIF83WklQX0JZVEVfREVGSU5FRAotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIEJ5dGU7Ci0jZW5kaWYKLQotI2lmbmRlZiBfN1pJUF9VSU5UMTZfREVGSU5FRAotI2RlZmluZSBfN1pJUF9VSU5UMTZfREVGSU5FRAotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBVSW50MTY7Ci0jZW5kaWYKLQotI2lmbmRlZiBfN1pJUF9VSU5UMzJfREVGSU5FRAotI2RlZmluZSBfN1pJUF9VSU5UMzJfREVGSU5FRAotI2lmZGVmIF9MWk1BX1VJTlQzMl9JU19VTE9ORwotdHlwZWRlZiB1bnNpZ25lZCBsb25nIFVJbnQzMjsKLSNlbHNlCi10eXBlZGVmIHVuc2lnbmVkIGludCBVSW50MzI7Ci0jZW5kaWYKLSNlbmRpZgotCi0vKiAjZGVmaW5lIF9MWk1BX05PX1NZU1RFTV9TSVpFX1QgKi8KLS8qIFlvdSBjYW4gdXNlIGl0LCBpZiB5b3UgZG9uJ3Qgd2FudCA8c3RkZGVmLmg+ICovCi0KLSNpZm5kZWYgXzdaSVBfU0laRVRfREVGSU5FRAotI2RlZmluZSBfN1pJUF9TSVpFVF9ERUZJTkVECi0jaWZkZWYgX0xaTUFfTk9fU1lTVEVNX1NJWkVfVAotdHlwZWRlZiBVSW50MzIgU2l6ZVQ7Ci0jZWxzZQotI2luY2x1ZGUgPHN0ZGRlZi5oPgotdHlwZWRlZiBzaXplX3QgU2l6ZVQ7Ci0jZW5kaWYKLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2xpYl9nZW5lcmljL2x6bWEvTWFrZWZpbGUgYi9saWJfZ2VuZXJpYy9sem1hL01ha2VmaWxlCmluZGV4IDM0MDBjZDkuLjI5MTZmMjEgMTAwNjQ0Ci0tLSBhL2xpYl9nZW5lcmljL2x6bWEvTWFrZWZpbGUKKysrIGIvbGliX2dlbmVyaWMvbHptYS9NYWtlZmlsZQpAQCAtMzAsNyArMzAsOSBAQAogCiBTT0JKUwk9CiAKLUNPQkpTLSQoQ09ORklHX0xaTUEpICs9IEx6bWFEZWNvZGUubyBMem1hVG9vbHMubworQ0ZMQUdTICs9IC1EX0xaTUFfUFJPQjMyIC1JJChUT1BESVIpL2luY2x1ZGUvbGludXgKKworQ09CSlMtJChDT05GSUdfTFpNQSkgKz0gTHptYURlYy5vIEx6bWFUb29scy5vCiAKIENPQkpTCT0gJChDT0JKUy15KQogU1JDUyAJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKZGlmZiAtLWdpdCBhL2xpYl9nZW5lcmljL2x6bWEvUkVBRE1FLnR4dCBiL2xpYl9nZW5lcmljL2x6bWEvUkVBRE1FLnR4dAppbmRleCBmZGIzMDg2Li4yM2E5YmUyIDEwMDY0NAotLS0gYS9saWJfZ2VuZXJpYy9sem1hL1JFQURNRS50eHQKKysrIGIvbGliX2dlbmVyaWMvbHptYS9SRUFETUUudHh0CkBAIC03LDE0ICs3LDE0IEBACiBUaGUgaW1wb3J0IGlzIG1hZGUgdXNpbmcgdGhlIGltcG9ydF9sem1hc2RrLnNoIHNjcmlwdCB0aGF0OgogCiAqIHVudGFycyB0aGUgbHptYVhZWS50YXIuYnoyIGZpbGUgKGZyb20gdGhlIGRvd25sb2FkIHdlYiBwYWdlKQotKiBjb3BpZXMgdGhlIGZpbGVzIEx6bWFEZWNvZGUuaCwgTHptYVR5cGVzLmgsIEx6bWFEZWNvZGUuYywgaGlzdG9yeS50eHQsCi0gIExHUEwudHh0LCBhbmQgbHptYS50eHQgZnJvbSBzb3VyY2UgYXJjaGl2ZSBpbnRvIHRoZSBsaWJfbHptYSBkaXJlY3RvcnkgKHB3ZCkuCisqIGNvcGllcyB0aGUgZmlsZXMgTHptYURlYy5oLCBUeXBlcy5oLCBMem1hRGVjLmMsIGhpc3RvcnkudHh0LAorICBhbmQgbHptYS50eHQgZnJvbSBzb3VyY2UgYXJjaGl2ZSBpbnRvIHRoZSBsaWJfbHptYSBkaXJlY3RvcnkgKHB3ZCkuCiAKIEV4YW1wbGU6CiAKLSAuL2ltcG9ydF9sem1hc2RrLnNoIH4vbHptYTQ1Ny50YXIuYnoyCisgLiBpbXBvcnRfbHptYXNkay5zaCB+L2x6bWE0NjUudGFyLmJ6MgogCi1Ob3RpY2U6IFRoZSBmaWxlcyBmcm9tIGx6bWEgc2RrIGFyZSBub3QgX21vZGlmaWVkXyBieSB0aGlzIHNjcmlwdCEKK05vdGljZTogVGhlIGZpbGVzIGZyb20gbHptYSBzZGsgYXJlIF9ub3QgbW9kaWZpZWRfIGJ5IHRoaXMgc2NyaXB0IQogCiBUaGUgZmlsZXMgTHptYVRvb2xzLntjLGh9IGFyZSBwcm92aWRlZCB0byBleHBvcnQgdGhlIGx6bWFCdWZmVG9CdWZmRGVjb21wcmVzcygpCiBmdW5jdGlvbiB0aGF0IHdyYXBzIHRoZSBjb21wbGV4IEx6bWFEZWNvZGUoKSBmdW5jdGlvbiBmcm9tIHRoZSBMWk1BIFNESy4gVGhlCmRpZmYgLS1naXQgYS9saWJfZ2VuZXJpYy9sem1hL1R5cGVzLmggYi9saWJfZ2VuZXJpYy9sem1hL1R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFmNWNmYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYl9nZW5lcmljL2x6bWEvVHlwZXMuaApAQCAtMCwwICsxLDIwOCBAQAorLyogVHlwZXMuaCAtLSBCYXNpYyB0eXBlcworMjAwOC0xMS0yMyA6IElnb3IgUGF2bG92IDogUHVibGljIGRvbWFpbiAqLworCisjaWZuZGVmIF9fN1pfVFlQRVNfSAorI2RlZmluZSBfXzdaX1RZUEVTX0gKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisjaWZkZWYgX1dJTjMyCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2VuZGlmCisKKyNkZWZpbmUgU1pfT0sgMAorCisjZGVmaW5lIFNaX0VSUk9SX0RBVEEgMQorI2RlZmluZSBTWl9FUlJPUl9NRU0gMgorI2RlZmluZSBTWl9FUlJPUl9DUkMgMworI2RlZmluZSBTWl9FUlJPUl9VTlNVUFBPUlRFRCA0CisjZGVmaW5lIFNaX0VSUk9SX1BBUkFNIDUKKyNkZWZpbmUgU1pfRVJST1JfSU5QVVRfRU9GIDYKKyNkZWZpbmUgU1pfRVJST1JfT1VUUFVUX0VPRiA3CisjZGVmaW5lIFNaX0VSUk9SX1JFQUQgOAorI2RlZmluZSBTWl9FUlJPUl9XUklURSA5CisjZGVmaW5lIFNaX0VSUk9SX1BST0dSRVNTIDEwCisjZGVmaW5lIFNaX0VSUk9SX0ZBSUwgMTEKKyNkZWZpbmUgU1pfRVJST1JfVEhSRUFEIDEyCisKKyNkZWZpbmUgU1pfRVJST1JfQVJDSElWRSAxNgorI2RlZmluZSBTWl9FUlJPUl9OT19BUkNISVZFIDE3CisKK3R5cGVkZWYgaW50IFNSZXM7CisKKyNpZmRlZiBfV0lOMzIKK3R5cGVkZWYgRFdPUkQgV1JlczsKKyNlbHNlCit0eXBlZGVmIGludCBXUmVzOworI2VuZGlmCisKKyNpZm5kZWYgUklOT0sKKyNkZWZpbmUgUklOT0soeCkgeyBpbnQgX19yZXN1bHRfXyA9ICh4KTsgaWYgKF9fcmVzdWx0X18gIT0gMCkgcmV0dXJuIF9fcmVzdWx0X187IH0KKyNlbmRpZgorCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgQnl0ZTsKK3R5cGVkZWYgc2hvcnQgSW50MTY7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IFVJbnQxNjsKKworI2lmZGVmIF9MWk1BX1VJTlQzMl9JU19VTE9ORwordHlwZWRlZiBsb25nIEludDMyOwordHlwZWRlZiB1bnNpZ25lZCBsb25nIFVJbnQzMjsKKyNlbHNlCit0eXBlZGVmIGludCBJbnQzMjsKK3R5cGVkZWYgdW5zaWduZWQgaW50IFVJbnQzMjsKKyNlbmRpZgorCisjaWZkZWYgX1NaX05PX0lOVF82NAorCisvKiBkZWZpbmUgX1NaX05PX0lOVF82NCwgaWYgeW91ciBjb21waWxlciBkb2Vzbid0IHN1cHBvcnQgNjQtYml0IGludGVnZXJzLgorICAgTk9URVM6IFNvbWUgY29kZSB3aWxsIHdvcmsgaW5jb3JyZWN0bHkgaW4gdGhhdCBjYXNlISAqLworCit0eXBlZGVmIGxvbmcgSW50NjQ7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgVUludDY0OworCisjZWxzZQorCisjaWYgZGVmaW5lZChfTVNDX1ZFUikgfHwgZGVmaW5lZChfX0JPUkxBTkRDX18pCit0eXBlZGVmIF9faW50NjQgSW50NjQ7Cit0eXBlZGVmIHVuc2lnbmVkIF9faW50NjQgVUludDY0OworI2Vsc2UKK3R5cGVkZWYgbG9uZyBsb25nIGludCBJbnQ2NDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBVSW50NjQ7CisjZW5kaWYKKworI2VuZGlmCisKKyNpZmRlZiBfTFpNQV9OT19TWVNURU1fU0laRV9UCit0eXBlZGVmIFVJbnQzMiBTaXplVDsKKyNlbHNlCit0eXBlZGVmIHNpemVfdCBTaXplVDsKKyNlbmRpZgorCit0eXBlZGVmIGludCBCb29sOworI2RlZmluZSBUcnVlIDEKKyNkZWZpbmUgRmFsc2UgMAorCisKKyNpZmRlZiBfTVNDX1ZFUgorCisjaWYgX01TQ19WRVIgPj0gMTMwMAorI2RlZmluZSBNWV9OT19JTkxJTkUgX19kZWNsc3BlYyhub2lubGluZSkKKyNlbHNlCisjZGVmaW5lIE1ZX05PX0lOTElORQorI2VuZGlmCisKKyNkZWZpbmUgTVlfQ0RFQ0wgX19jZGVjbAorI2RlZmluZSBNWV9TVERfQ0FMTCBfX3N0ZGNhbGwKKyNkZWZpbmUgTVlfRkFTVF9DQUxMIE1ZX05PX0lOTElORSBfX2Zhc3RjYWxsCisKKyNlbHNlCisKKyNkZWZpbmUgTVlfQ0RFQ0wKKyNkZWZpbmUgTVlfU1REX0NBTEwKKyNkZWZpbmUgTVlfRkFTVF9DQUxMCisKKyNlbmRpZgorCisKKy8qIFRoZSBmb2xsb3dpbmcgaW50ZXJmYWNlcyB1c2UgZmlyc3QgcGFyYW1ldGVyIGFzIHBvaW50ZXIgdG8gc3RydWN0dXJlICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIFNSZXMgKCpSZWFkKSh2b2lkICpwLCB2b2lkICpidWYsIHNpemVfdCAqc2l6ZSk7CisgICAgLyogaWYgKGlucHV0KCpzaXplKSAhPSAwICYmIG91dHB1dCgqc2l6ZSkgPT0gMCkgbWVhbnMgZW5kX29mX3N0cmVhbS4KKyAgICAgICAob3V0cHV0KCpzaXplKSA8IGlucHV0KCpzaXplKSkgaXMgYWxsb3dlZCAqLworfSBJU2VxSW5TdHJlYW07CisKKy8qIGl0IGNhbiByZXR1cm4gU1pfRVJST1JfSU5QVVRfRU9GICovCitTUmVzIFNlcUluU3RyZWFtX1JlYWQoSVNlcUluU3RyZWFtICpzdHJlYW0sIHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpOworU1JlcyBTZXFJblN0cmVhbV9SZWFkMihJU2VxSW5TdHJlYW0gKnN0cmVhbSwgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSwgU1JlcyBlcnJvclR5cGUpOworU1JlcyBTZXFJblN0cmVhbV9SZWFkQnl0ZShJU2VxSW5TdHJlYW0gKnN0cmVhbSwgQnl0ZSAqYnVmKTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgc2l6ZV90ICgqV3JpdGUpKHZvaWQgKnAsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpOworICAgIC8qIFJldHVybnM6IHJlc3VsdCAtIHRoZSBudW1iZXIgb2YgYWN0dWFsbHkgd3JpdHRlbiBieXRlcy4KKyAgICAgICAocmVzdWx0IDwgc2l6ZSkgbWVhbnMgZXJyb3IgKi8KK30gSVNlcU91dFN0cmVhbTsKKwordHlwZWRlZiBlbnVtCit7CisgIFNaX1NFRUtfU0VUID0gMCwKKyAgU1pfU0VFS19DVVIgPSAxLAorICBTWl9TRUVLX0VORCA9IDIKK30gRVN6U2VlazsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgU1JlcyAoKlJlYWQpKHZvaWQgKnAsIHZvaWQgKmJ1Ziwgc2l6ZV90ICpzaXplKTsgIC8qIHNhbWUgYXMgSVNlcUluU3RyZWFtOjpSZWFkICovCisgIFNSZXMgKCpTZWVrKSh2b2lkICpwLCBJbnQ2NCAqcG9zLCBFU3pTZWVrIG9yaWdpbik7Cit9IElTZWVrSW5TdHJlYW07CisKK3R5cGVkZWYgc3RydWN0Cit7CisgIFNSZXMgKCpMb29rKSh2b2lkICpwLCB2b2lkICoqYnVmLCBzaXplX3QgKnNpemUpOworICAgIC8qIGlmIChpbnB1dCgqc2l6ZSkgIT0gMCAmJiBvdXRwdXQoKnNpemUpID09IDApIG1lYW5zIGVuZF9vZl9zdHJlYW0uCisgICAgICAgKG91dHB1dCgqc2l6ZSkgPiBpbnB1dCgqc2l6ZSkpIGlzIG5vdCBhbGxvd2VkCisgICAgICAgKG91dHB1dCgqc2l6ZSkgPCBpbnB1dCgqc2l6ZSkpIGlzIGFsbG93ZWQgKi8KKyAgU1JlcyAoKlNraXApKHZvaWQgKnAsIHNpemVfdCBvZmZzZXQpOworICAgIC8qIG9mZnNldCBtdXN0IGJlIDw9IG91dHB1dCgqc2l6ZSkgb2YgTG9vayAqLworCisgIFNSZXMgKCpSZWFkKSh2b2lkICpwLCB2b2lkICpidWYsIHNpemVfdCAqc2l6ZSk7CisgICAgLyogcmVhZHMgZGlyZWN0bHkgKHdpdGhvdXQgYnVmZmVyKS4gSXQncyBzYW1lIGFzIElTZXFJblN0cmVhbTo6UmVhZCAqLworICBTUmVzICgqU2Vlaykodm9pZCAqcCwgSW50NjQgKnBvcywgRVN6U2VlayBvcmlnaW4pOworfSBJTG9va0luU3RyZWFtOworCitTUmVzIExvb2tJblN0cmVhbV9Mb29rUmVhZChJTG9va0luU3RyZWFtICpzdHJlYW0sIHZvaWQgKmJ1Ziwgc2l6ZV90ICpzaXplKTsKK1NSZXMgTG9va0luU3RyZWFtX1NlZWtUbyhJTG9va0luU3RyZWFtICpzdHJlYW0sIFVJbnQ2NCBvZmZzZXQpOworCisvKiByZWFkcyB2aWEgSUxvb2tJblN0cmVhbTo6UmVhZCAqLworU1JlcyBMb29rSW5TdHJlYW1fUmVhZDIoSUxvb2tJblN0cmVhbSAqc3RyZWFtLCB2b2lkICpidWYsIHNpemVfdCBzaXplLCBTUmVzIGVycm9yVHlwZSk7CitTUmVzIExvb2tJblN0cmVhbV9SZWFkKElMb29rSW5TdHJlYW0gKnN0cmVhbSwgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSk7CisKKyNkZWZpbmUgTG9va1RvUmVhZF9CVUZfU0laRSAoMSA8PCAxNCkKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgSUxvb2tJblN0cmVhbSBzOworICBJU2Vla0luU3RyZWFtICpyZWFsU3RyZWFtOworICBzaXplX3QgcG9zOworICBzaXplX3Qgc2l6ZTsKKyAgQnl0ZSBidWZbTG9va1RvUmVhZF9CVUZfU0laRV07Cit9IENMb29rVG9SZWFkOworCit2b2lkIExvb2tUb1JlYWRfQ3JlYXRlVlRhYmxlKENMb29rVG9SZWFkICpwLCBpbnQgbG9va2FoZWFkKTsKK3ZvaWQgTG9va1RvUmVhZF9Jbml0KENMb29rVG9SZWFkICpwKTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgSVNlcUluU3RyZWFtIHM7CisgIElMb29rSW5TdHJlYW0gKnJlYWxTdHJlYW07Cit9IENTZWNUb0xvb2s7CisKK3ZvaWQgU2VjVG9Mb29rX0NyZWF0ZVZUYWJsZShDU2VjVG9Mb29rICpwKTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgSVNlcUluU3RyZWFtIHM7CisgIElMb29rSW5TdHJlYW0gKnJlYWxTdHJlYW07Cit9IENTZWNUb1JlYWQ7CisKK3ZvaWQgU2VjVG9SZWFkX0NyZWF0ZVZUYWJsZShDU2VjVG9SZWFkICpwKTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgU1JlcyAoKlByb2dyZXNzKSh2b2lkICpwLCBVSW50NjQgaW5TaXplLCBVSW50NjQgb3V0U2l6ZSk7CisgICAgLyogUmV0dXJuczogcmVzdWx0LiAocmVzdWx0ICE9IFNaX09LKSBtZWFucyBicmVhay4KKyAgICAgICBWYWx1ZSAoVUludDY0KShJbnQ2NCktMSBmb3Igc2l6ZSBtZWFucyB1bmtub3duIHZhbHVlLiAqLworfSBJQ29tcHJlc3NQcm9ncmVzczsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgdm9pZCAqKCpBbGxvYykodm9pZCAqcCwgc2l6ZV90IHNpemUpOworICB2b2lkICgqRnJlZSkodm9pZCAqcCwgdm9pZCAqYWRkcmVzcyk7IC8qIGFkZHJlc3MgY2FuIGJlIDAgKi8KK30gSVN6QWxsb2M7CisKKyNkZWZpbmUgSUFsbG9jX0FsbG9jKHAsIHNpemUpIChwKS0+QWxsb2MoKHApLCBzaXplKQorI2RlZmluZSBJQWxsb2NfRnJlZShwLCBhKSAocCktPkZyZWUoKHApLCBhKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYl9nZW5lcmljL2x6bWEvaGlzdG9yeS50eHQgYi9saWJfZ2VuZXJpYy9sem1hL2hpc3RvcnkudHh0CmluZGV4IGRhZDE4NTguLjYyNGZiMWQgMTAwNjQ0Ci0tLSBhL2xpYl9nZW5lcmljL2x6bWEvaGlzdG9yeS50eHQKKysrIGIvbGliX2dlbmVyaWMvbHptYS9oaXN0b3J5LnR4dApAQCAtMSwxOTIgKzEsMjMwIEBACiBISVNUT1JZIG9mIHRoZSBMWk1BIFNESwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotICA0LjU3CQkgMjAwNy0xMi0xMgotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLSBTcGVlZCBvcHRpbWl6YXRpb25zIGluINErKyBMWk1BIERlY29kZXIuCi0gICAgLSBTbWFsbCBjaGFuZ2VzIGZvciBtb3JlIGNvbXBhdGliaWxpdHkgd2l0aCBzb21lIEMvQysrIGNvbXBpbGVycy4KKzQuNjUgICAgICAgICAgIDIwMDktMDItMDMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0gU29tZSBtaW5vciBmaXhlcwogCiAKLSAgNC40OSBiZXRhCSAyMDA3LTA3LTA1Ci0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAtIC43eiBBTlNJLUMgRGVjb2RlcjoKLQkgLSBub3cgaXQgc3VwcG9ydHMgQkNKIGFuZCBCQ0oyIGZpbHRlcnMKLQkgLSBub3cgaXQgc3VwcG9ydHMgZmlsZXMgbGFyZ2VyIHRoYW4gNCBHQi4KLQkgLSBub3cgaXQgc3VwcG9ydHMgIkxhc3QgV3JpdGUgVGltZSIgZmllbGQgZm9yIGZpbGVzLgotICAgIC0gQysrIGNvZGUgZm9yIC43eiBhcmNoaXZlcyBjb21wcmVzc2luZy9kZWNvbXByZXNzaW5nIGZyb20gNy16aXAKLSAgICAgIHdhcyBpbmNsdWRlZCB0byBMWk1BIFNESy4KKzQuNjMgICAgICAgICAgIDIwMDgtMTItMzEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0gU29tZSBtaW5vciBmaXhlcwogCiAKLSAgNC40MwkJIDIwMDYtMDYtMDQKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC0gU21hbGwgY2hhbmdlcyBmb3IgbW9yZSBjb21wYXRpYmlsaXR5IHdpdGggc29tZSBDL0MrKyBjb21waWxlcnMuCis0LjYxIGJldGEgICAgICAyMDA4LTExLTIzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistIFRoZSBidWcgaW4gQU5TSS1DIExaTUEgRGVjb2RlciB3YXMgZml4ZWQ6CisgICAgSWYgZW5jb2RlZCBzdHJlYW0gd2FzIGNvcnJ1cHRlZCwgZGVjb2RlciBjb3VsZCBhY2Nlc3MgbWVtb3J5CisgICAgb3V0c2lkZSBvZiBhbGxvY2F0ZWQgcmFuZ2UuCistIFNvbWUgY2hhbmdlcyBpbiBBTlNJLUMgN3ogRGVjb2RlciBpbnRlcmZhY2VzLgorLSBMWk1BIFNESyBpcyBwbGFjZWQgaW4gdGhlIHB1YmxpYyBkb21haW4uCiAKIAotICA0LjQyCQkgMjAwNi0wNS0xNQotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLSBTbWFsbCBjaGFuZ2VzIGluIC5oIGZpbGVzIGluIEFOU0ktQyB2ZXJzaW9uLgorNC42MCBiZXRhICAgICAgMjAwOC0wOC0xOQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLSBTb21lIG1pbm9yIGZpeGVzLgogCiAKLSAgNC4zOSBiZXRhCSAyMDA2LTA0LTE0Ci0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAtIEJ1ZyBpbiB2ZXJzaW9ucyA0LjMzYjo0LjM4YiB3YXMgZml4ZWQ6Ci0gICAgICBDKysgdmVyc2lvbiBvZiBMWk1BIGVuY29kZXIgY291bGQgbm90IGNvcnJlY3RseSBjb21wcmVzcwotICAgICAgZmlsZXMgbGFyZ2VyIHRoYW4gMiBHQiB3aXRoIEhDNCBtYXRjaCBmaW5kZXIgKC1tZmhjNCkuCis0LjU5IGJldGEgICAgICAyMDA4LTA4LTEzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistIFRoZSBidWcgd2FzIGZpeGVkOgorICAgIExaTUEgRW5jb2RlciBpbiBmYXN0IGNvbXByZXNzaW9uIG1vZGUgY291bGQgYWNjZXNzIG1lbW9yeSBvdXRzaWRlIG9mCisgICAgYWxsb2NhdGVkIHJhbmdlIGluIHNvbWUgcmFyZSBjYXNlcy4KIAogCi0gIDQuMzcgYmV0YQkgMjAwNS0wNC0wNgotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLSBGaXhlcyBpbiBDKysgY29kZTogY29kZSBjb3VsZCBubyBiZSBjb21waWxlZCBpZiBfTk9fRVhDRVBUSU9OUyB3YXMgZGVmaW5lZC4KKzQuNTggYmV0YSAgICAgIDIwMDgtMDUtMDUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0gQU5TSS1DIExaTUEgRGVjb2RlciB3YXMgcmV3cml0dGVuIGZvciBzcGVlZCBvcHRpbWl6YXRpb25zLgorLSBBTlNJLUMgTFpNQSBFbmNvZGVyIHdhcyBpbmNsdWRlZCB0byBMWk1BIFNESy4KKy0gQysrIExaTUEgY29kZSBub3cgaXMganVzdCB3cmFwcGVyIG92ZXIgQU5TSS1DIGNvZGUuCiAKIAotICA0LjM1IGJldGEJIDIwMDUtMDMtMDIKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC0gQnVnIHdhcyBmaXhlZCBpbiBDKysgdmVyc2lvbiBvZiBMWk1BIERlY29kZXI6Ci0gICAgICAgSWYgZW5jb2RlZCBzdHJlYW0gd2FzIGNvcnJ1cHRlZCwgZGVjb2RlciBjb3VsZCBhY2Nlc3MgbWVtb3J5Ci0gICAgICAgb3V0c2lkZSBvZiBhbGxvY2F0ZWQgcmFuZ2UuCis0LjU3ICAgICAgICAgICAyMDA3LTEyLTEyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistIFNwZWVkIG9wdGltaXphdGlvbnMgaW4g0SsrIExaTUEgRGVjb2Rlci4KKy0gU21hbGwgY2hhbmdlcyBmb3IgbW9yZSBjb21wYXRpYmlsaXR5IHdpdGggc29tZSBDL0MrKyBjb21waWxlcnMuCiAKIAotICA0LjM0IGJldGEJIDIwMDYtMDItMjcKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC0gQ29tcHJlc3Npbmcgc3BlZWQgYW5kIG1lbW9yeSByZXF1aXJlbWVudHMgZm9yIGNvbXByZXNzaW5nIHdlcmUgaW5jcmVhc2VkCi0gICAgLSBMWk1BIG5vdyBjYW4gdXNlIG9ubHkgdGhlc2UgbWF0Y2ggZmluZGVyczogSEM0LCBCVDIsIEJUMywgQlQ0Cis0LjQ5IGJldGEgICAgICAyMDA3LTA3LTA1CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistIC43eiBBTlNJLUMgRGVjb2RlcjoKKyAgICAgLSBub3cgaXQgc3VwcG9ydHMgQkNKIGFuZCBCQ0oyIGZpbHRlcnMKKyAgICAgLSBub3cgaXQgc3VwcG9ydHMgZmlsZXMgbGFyZ2VyIHRoYW4gNCBHQi4KKyAgICAgLSBub3cgaXQgc3VwcG9ydHMgIkxhc3QgV3JpdGUgVGltZSIgZmllbGQgZm9yIGZpbGVzLgorLSBDKysgY29kZSBmb3IgLjd6IGFyY2hpdmVzIGNvbXByZXNzaW5nL2RlY29tcHJlc3NpbmcgZnJvbSA3LXppcAorICB3YXMgaW5jbHVkZWQgdG8gTFpNQSBTREsuCiAKIAotICA0LjMyCQkgMjAwNS0xMi0wOQotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLSBKYXZhIHZlcnNpb24gb2YgTFpNQSBTREsgd2FzIGluY2x1ZGVkCis0LjQzICAgICAgICAgICAyMDA2LTA2LTA0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistIFNtYWxsIGNoYW5nZXMgZm9yIG1vcmUgY29tcGF0aWJpbGl0eSB3aXRoIHNvbWUgQy9DKysgY29tcGlsZXJzLgogCiAKLSAgNC4zMAkJIDIwMDUtMTEtMjAKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC0gQ29tcHJlc3Npb24gcmF0aW8gd2FzIGltcHJvdmVkIGluIC1hMiBtb2RlCi0gICAgLSBTcGVlZCBvcHRpbWl6YXRpb25zIGZvciBjb21wcmVzc2luZyBpbiAtYTIgbW9kZQotICAgIC0gLWZiIHN3aXRjaCBub3cgc3VwcG9ydHMgdmFsdWVzIHVwIHRvIDI3MwotICAgIC0gQnVnIGluIDd6X0MgKDd6SW4uYykgd2FzIGZpeGVkOgotICAgICAgSXQgdXNlZCBBbGxvYy9GcmVlIGZ1bmN0aW9ucyBmcm9tIGRpZmZlcmVudCBtZW1vcnkgcG9vbHMuCi0gICAgICBTbyBpZiBwcm9ncmFtIHVzZWQgdHdvIG1lbW9yeSBwb29scywgaXQgd29ya2VkIGluY29ycmVjdGx5LgotICAgIC0gN3pfQzogLjd6IGZvcm1hdCBzdXBwb3J0aW5nIHdhcyBpbXByb3ZlZAotICAgIC0gTFpNQSMgU0RLIChDIy5ORVQgdmVyc2lvbikgd2FzIGluY2x1ZGVkCis0LjQyICAgICAgICAgICAyMDA2LTA1LTE1CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistIFNtYWxsIGNoYW5nZXMgaW4gLmggZmlsZXMgaW4gQU5TSS1DIHZlcnNpb24uCiAKIAotICA0LjI3IChVcGRhdGVkKSAyMDA1LTA5LTIxCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgIC0gU29tZSBHVUlEcy9pbnRlcmZhY2VzIGluIEMrKyB3ZXJlIGNoYW5nZWQuCi0gICAgIElTdHJlYW0uaDoKLSAgICAgICBJU2VxdWVudGlhbEluU3RyZWFtOjpSZWFkIG5vdyB3b3JrcyBhcyBvbGQgUmVhZFBhcnQKLSAgICAgICBJU2VxdWVudGlhbE91dFN0cmVhbTo6V3JpdGUgbm93IHdvcmtzIGFzIG9sZCBXcml0ZVBhcnQKKzQuMzkgYmV0YSAgICAgIDIwMDYtMDQtMTQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0gVGhlIGJ1ZyBpbiB2ZXJzaW9ucyA0LjMzYjo0LjM4YiB3YXMgZml4ZWQ6CisgIEMrKyB2ZXJzaW9uIG9mIExaTUEgZW5jb2RlciBjb3VsZCBub3QgY29ycmVjdGx5IGNvbXByZXNzCisgIGZpbGVzIGxhcmdlciB0aGFuIDIgR0Igd2l0aCBIQzQgbWF0Y2ggZmluZGVyICgtbWZoYzQpLgogCiAKLSAgNC4yNwkJIDIwMDUtMDgtMDcKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC0gQnVnIGluIEx6bWFEZWNvZGVTaXplLmMgd2FzIGZpeGVkOgotICAgICAgIGlmIF9MWk1BX0lOX0NCIGFuZCBfTFpNQV9PVVRfUkVBRCB3ZXJlIGRlZmluZWQsCi0gICAgICAgZGVjb21wcmVzc2luZyB3b3JrZWQgaW5jb3JyZWN0bHkuCis0LjM3IGJldGEgICAgICAyMDA1LTA0LTA2CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistIEZpeGVzIGluIEMrKyBjb2RlOiBjb2RlIGNvdWxkIG5vIGJlIGNvbXBpbGVkIGlmIF9OT19FWENFUFRJT05TIHdhcyBkZWZpbmVkLgogCiAKLSAgNC4yNgkJIDIwMDUtMDgtMDUKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC0gRml4ZXMgaW4gN3pfQyBjb2RlIGFuZCBMem1hVGVzdC5jOgotICAgICAgcHJldmlvdXMgdmVyc2lvbnMgY291bGQgd29yayBpbmNvcnJlY3RseSwKLSAgICAgIGlmIG1hbGxvYygwKSByZXR1cm5zIDAKKzQuMzUgYmV0YSAgICAgIDIwMDUtMDMtMDIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0gVGhlIGJ1ZyB3YXMgZml4ZWQgaW4gQysrIHZlcnNpb24gb2YgTFpNQSBEZWNvZGVyOgorICAgIElmIGVuY29kZWQgc3RyZWFtIHdhcyBjb3JydXB0ZWQsIGRlY29kZXIgY291bGQgYWNjZXNzIG1lbW9yeQorICAgIG91dHNpZGUgb2YgYWxsb2NhdGVkIHJhbmdlLgogCiAKLSAgNC4yMwkJIDIwMDUtMDYtMjkKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC0gU21hbGwgZml4ZXMgaW4gQysrIGNvZGUKKzQuMzQgYmV0YSAgICAgIDIwMDYtMDItMjcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0gQ29tcHJlc3Npbmcgc3BlZWQgYW5kIG1lbW9yeSByZXF1aXJlbWVudHMgZm9yIGNvbXByZXNzaW5nIHdlcmUgaW5jcmVhc2VkCistIExaTUEgbm93IGNhbiB1c2Ugb25seSB0aGVzZSBtYXRjaCBmaW5kZXJzOiBIQzQsIEJUMiwgQlQzLCBCVDQKIAogCi0gIDQuMjIJCSAyMDA1LTA2LTEwCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAtIFNtYWxsIGZpeGVzCis0LjMyICAgICAgICAgICAyMDA1LTEyLTA5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistIEphdmEgdmVyc2lvbiBvZiBMWk1BIFNESyB3YXMgaW5jbHVkZWQKIAogCi0gIDQuMjEJCSAyMDA1LTA2LTA4Ci0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAtIEludGVyZmFjZXMgZm9yIEFOU0ktQyBMWk1BIERlY29kZXIgKEx6bWFEZWNvZGUuYykgd2VyZSBjaGFuZ2VkCi0gICAgLSBOZXcgYWRkaXRpb25hbCB2ZXJzaW9uIG9mIEFOU0ktQyBMWk1BIERlY29kZXIgd2l0aCB6bGliLWxpa2UgaW50ZXJmYWNlOgotCS0gTHptYVN0YXRlRGVjb2RlLmgKLQktIEx6bWFTdGF0ZURlY29kZS5jCi0JLSBMem1hU3RhdGVUZXN0LmMKLSAgICAtIEFOU0ktQyBMWk1BIERlY29kZXIgbm93IGNhbiBkZWNvbXByZXNzIGZpbGVzIGxhcmdlciB0aGFuIDQgR0IKKzQuMzAgICAgICAgICAgIDIwMDUtMTEtMjAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0gQ29tcHJlc3Npb24gcmF0aW8gd2FzIGltcHJvdmVkIGluIC1hMiBtb2RlCistIFNwZWVkIG9wdGltaXphdGlvbnMgZm9yIGNvbXByZXNzaW5nIGluIC1hMiBtb2RlCistIC1mYiBzd2l0Y2ggbm93IHN1cHBvcnRzIHZhbHVlcyB1cCB0byAyNzMKKy0gVGhlIGJ1ZyBpbiA3el9DICg3ekluLmMpIHdhcyBmaXhlZDoKKyAgSXQgdXNlZCBBbGxvYy9GcmVlIGZ1bmN0aW9ucyBmcm9tIGRpZmZlcmVudCBtZW1vcnkgcG9vbHMuCisgIFNvIGlmIHByb2dyYW0gdXNlZCB0d28gbWVtb3J5IHBvb2xzLCBpdCB3b3JrZWQgaW5jb3JyZWN0bHkuCistIDd6X0M6IC43eiBmb3JtYXQgc3VwcG9ydGluZyB3YXMgaW1wcm92ZWQKKy0gTFpNQSMgU0RLIChDIy5ORVQgdmVyc2lvbikgd2FzIGluY2x1ZGVkCiAKIAotICA0LjE3CQkgMjAwNS0wNC0xOAotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLSBOZXcgZXhhbXBsZSBmb3IgUkFNLT5SQU0gY29tcHJlc3NpbmcvZGVjb21wcmVzc2luZzoKLSAgICAgIExaTUEgKyBCQ0ogKGZpbHRlciBmb3IgeDg2IGNvZGUpOgotCS0gTHptYVJhbS5oCi0JLSBMem1hUmFtLmNwcAotCS0gTHptYVJhbURlY29kZS5oCi0JLSBMem1hUmFtRGVjb2RlLmMKLQktIC1mODYgc3dpdGNoIGZvciBsem1hLmV4ZQorNC4yNyAoVXBkYXRlZCkgMjAwNS0wOS0yMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLSBTb21lIEdVSURzL2ludGVyZmFjZXMgaW4gQysrIHdlcmUgY2hhbmdlZC4KKyBJU3RyZWFtLmg6CisgICBJU2VxdWVudGlhbEluU3RyZWFtOjpSZWFkIG5vdyB3b3JrcyBhcyBvbGQgUmVhZFBhcnQKKyAgIElTZXF1ZW50aWFsT3V0U3RyZWFtOjpXcml0ZSBub3cgd29ya3MgYXMgb2xkIFdyaXRlUGFydAogCiAKLSAgNC4xNgkJIDIwMDUtMDMtMjkKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC0gQnVnIHdhcyBmaXhlZCBpbiBMem1hRGVjb2RlLmMgKEFOU0ktQyBMWk1BIERlY29kZXIpOgotICAgICAgIElmIF9MWk1BX09VVF9SRUFEIHdhcyBkZWZpbmVkLCBhbmQgaWYgZW5jb2RlZCBzdHJlYW0gd2FzIGNvcnJ1cHRlZCwKLSAgICAgICBkZWNvZGVyIGNvdWxkIGFjY2VzcyBtZW1vcnkgb3V0c2lkZSBvZiBhbGxvY2F0ZWQgcmFuZ2UuCi0gICAgLSBTcGVlZCBvcHRpbWl6YXRpb24gb2YgQU5TSS1DIExaTUEgRGVjb2RlciAobm93IGl0J3MgYWJvdXQgMjAlIGZhc3RlcikuCi0gICAgICBPbGQgdmVyc2lvbiBvZiBMWk1BIERlY29kZXIgbm93IGlzIGluIGZpbGUgTHptYURlY29kZVNpemUuYy4KLSAgICAgIEx6bWFEZWNvZGVTaXplLmMgY2FuIHByb3ZpZGUgc2xpZ2h0bHkgc21hbGxlciBjb2RlIHRoYW4gTHptYURlY29kZS5jCi0gICAgLSBTbWFsbCBzcGVlZCBvcHRpbWl6YXRpb24gaW4gTFpNQSBDKysgY29kZQotICAgIC0gZmlsdGVyIGZvciBTUEFSQydzIGNvZGUgd2FzIGFkZGVkCi0gICAgLSBTaW1wbGlmaWVkIHZlcnNpb24gb2YgLjd6IEFOU0ktQyBEZWNvZGVyIHdhcyBpbmNsdWRlZAorNC4yNyAgICAgICAgICAgMjAwNS0wOC0wNworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLSBUaGUgYnVnIGluIEx6bWFEZWNvZGVTaXplLmMgd2FzIGZpeGVkOgorICAgaWYgX0xaTUFfSU5fQ0IgYW5kIF9MWk1BX09VVF9SRUFEIHdlcmUgZGVmaW5lZCwKKyAgIGRlY29tcHJlc3Npbmcgd29ya2VkIGluY29ycmVjdGx5LgogCiAKLSAgNC4wNgkJIDIwMDQtMDktMDUKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC0gQnVnIGluIHY0LjA1IHdhcyBmaXhlZDoKLQlMWk1BLUVuY29kZXIgZGlkbid0IHJlbGVhc2Ugb3V0cHV0IHN0cmVhbSBpbiBzb21lIGNhc2VzLgorNC4yNiAgICAgICAgICAgMjAwNS0wOC0wNQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLSBGaXhlcyBpbiA3el9DIGNvZGUgYW5kIEx6bWFUZXN0LmM6CisgIHByZXZpb3VzIHZlcnNpb25zIGNvdWxkIHdvcmsgaW5jb3JyZWN0bHksCisgIGlmIG1hbGxvYygwKSByZXR1cm5zIDAKIAogCi0gIDQuMDUJCSAyMDA0LTA4LTI1Ci0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAtIFNvdXJjZSBjb2RlIG9mIGZpbHRlcnMgZm9yIHg4NiwgSUEtNjQsIEFSTSwgQVJNLVRodW1iCi0gICAgICBhbmQgUG93ZXJQQyBjb2RlIHdhcyBpbmNsdWRlZCB0byBTREsKLSAgICAtIFNvbWUgaW50ZXJuYWwgbWlub3IgY2hhbmdlcworNC4yMyAgICAgICAgICAgMjAwNS0wNi0yOQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLSBTbWFsbCBmaXhlcyBpbiBDKysgY29kZQogCiAKLSAgNC4wNAkJIDIwMDQtMDctMjgKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC0gTW9yZSBjb21wYXRpYmlsaXR5IHdpdGggc29tZSBDKysgY29tcGlsZXJzCis0LjIyICAgICAgICAgICAyMDA1LTA2LTEwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistIFNtYWxsIGZpeGVzCiAKIAotICA0LjAzCQkgMjAwNC0wNi0xOAotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLSAiQmVuY2htYXJrIiBjb21tYW5kIHdhcyBhZGRlZC4gSXQgbWVhc3VyZXMgY29tcHJlc3NpbmcKLSAgICAgIGFuZCBkZWNvbXByZXNzaW5nIHNwZWVkIGFuZCBzaG93cyByYXRpbmcgdmFsdWVzLgotICAgICAgQWxzbyBpdCBjaGVja3MgaGFyZHdhcmUgZXJyb3JzLgorNC4yMSAgICAgICAgICAgMjAwNS0wNi0wOAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLSBJbnRlcmZhY2VzIGZvciBBTlNJLUMgTFpNQSBEZWNvZGVyIChMem1hRGVjb2RlLmMpIHdlcmUgY2hhbmdlZAorLSBOZXcgYWRkaXRpb25hbCB2ZXJzaW9uIG9mIEFOU0ktQyBMWk1BIERlY29kZXIgd2l0aCB6bGliLWxpa2UgaW50ZXJmYWNlOgorICAgIC0gTHptYVN0YXRlRGVjb2RlLmgKKyAgICAtIEx6bWFTdGF0ZURlY29kZS5jCisgICAgLSBMem1hU3RhdGVUZXN0LmMKKy0gQU5TSS1DIExaTUEgRGVjb2RlciBub3cgY2FuIGRlY29tcHJlc3MgZmlsZXMgbGFyZ2VyIHRoYW4gNCBHQgogCiAKLSAgNC4wMgkJIDIwMDQtMDYtMTAKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC0gQysrIExaTUEgRW5jb2Rlci9EZWNvZGVyIGNvZGUgbm93IGlzIG1vcmUgcG9ydGFibGUKLSAgICAgIGFuZCBpdCBjYW4gYmUgY29tcGlsZWQgYnkgR0NDIG9uIExpbnV4LgorNC4xNyAgICAgICAgICAgMjAwNS0wNC0xOAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLSBOZXcgZXhhbXBsZSBmb3IgUkFNLT5SQU0gY29tcHJlc3NpbmcvZGVjb21wcmVzc2luZzoKKyAgTFpNQSArIEJDSiAoZmlsdGVyIGZvciB4ODYgY29kZSk6CisgICAgLSBMem1hUmFtLmgKKyAgICAtIEx6bWFSYW0uY3BwCisgICAgLSBMem1hUmFtRGVjb2RlLmgKKyAgICAtIEx6bWFSYW1EZWNvZGUuYworICAgIC0gLWY4NiBzd2l0Y2ggZm9yIGx6bWEuZXhlCiAKIAotICA0LjAxCQkgMjAwNC0wMi0xNQotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLSBTb21lIGRldGVjdGlvbiBvZiBkYXRhIGNvcnJ1cHRpb24gd2FzIGVuYWJsZWQuCi0JTHptYURlY29kZS5jIC8gUmFuZ2VEZWNvZGVyUmVhZEJ5dGUKLQkuLi4uLgotCXsKLQkgIHJkLT5FeHRyYUJ5dGVzID0gMTsKLQkgIHJldHVybiAweEZGOwotCX0KKzQuMTYgICAgICAgICAgIDIwMDUtMDMtMjkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0gVGhlIGJ1ZyB3YXMgZml4ZWQgaW4gTHptYURlY29kZS5jIChBTlNJLUMgTFpNQSBEZWNvZGVyKToKKyAgIElmIF9MWk1BX09VVF9SRUFEIHdhcyBkZWZpbmVkLCBhbmQgaWYgZW5jb2RlZCBzdHJlYW0gd2FzIGNvcnJ1cHRlZCwKKyAgIGRlY29kZXIgY291bGQgYWNjZXNzIG1lbW9yeSBvdXRzaWRlIG9mIGFsbG9jYXRlZCByYW5nZS4KKy0gU3BlZWQgb3B0aW1pemF0aW9uIG9mIEFOU0ktQyBMWk1BIERlY29kZXIgKG5vdyBpdCdzIGFib3V0IDIwJSBmYXN0ZXIpLgorICBPbGQgdmVyc2lvbiBvZiBMWk1BIERlY29kZXIgbm93IGlzIGluIGZpbGUgTHptYURlY29kZVNpemUuYy4KKyAgTHptYURlY29kZVNpemUuYyBjYW4gcHJvdmlkZSBzbGlnaHRseSBzbWFsbGVyIGNvZGUgdGhhbiBMem1hRGVjb2RlLmMKKy0gU21hbGwgc3BlZWQgb3B0aW1pemF0aW9uIGluIExaTUEgQysrIGNvZGUKKy0gZmlsdGVyIGZvciBTUEFSQydzIGNvZGUgd2FzIGFkZGVkCistIFNpbXBsaWZpZWQgdmVyc2lvbiBvZiAuN3ogQU5TSS1DIERlY29kZXIgd2FzIGluY2x1ZGVkCiAKIAotICA0LjAwCQkgMjAwNC0wMi0xMwotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLSBPcmlnaW5hbCB2ZXJzaW9uIG9mIExaTUEgU0RLCis0LjA2ICAgICAgICAgICAyMDA0LTA5LTA1CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistIFRoZSBidWcgaW4gdjQuMDUgd2FzIGZpeGVkOgorICAgIExaTUEtRW5jb2RlciBkaWRuJ3QgcmVsZWFzZSBvdXRwdXQgc3RyZWFtIGluIHNvbWUgY2FzZXMuCisKKworNC4wNSAgICAgICAgICAgMjAwNC0wOC0yNQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLSBTb3VyY2UgY29kZSBvZiBmaWx0ZXJzIGZvciB4ODYsIElBLTY0LCBBUk0sIEFSTS1UaHVtYgorICBhbmQgUG93ZXJQQyBjb2RlIHdhcyBpbmNsdWRlZCB0byBTREsKKy0gU29tZSBpbnRlcm5hbCBtaW5vciBjaGFuZ2VzCisKKworNC4wNCAgICAgICAgICAgMjAwNC0wNy0yOAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLSBNb3JlIGNvbXBhdGliaWxpdHkgd2l0aCBzb21lIEMrKyBjb21waWxlcnMKKworCis0LjAzICAgICAgICAgICAyMDA0LTA2LTE4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistICJCZW5jaG1hcmsiIGNvbW1hbmQgd2FzIGFkZGVkLiBJdCBtZWFzdXJlcyBjb21wcmVzc2luZworICBhbmQgZGVjb21wcmVzc2luZyBzcGVlZCBhbmQgc2hvd3MgcmF0aW5nIHZhbHVlcy4KKyAgQWxzbyBpdCBjaGVja3MgaGFyZHdhcmUgZXJyb3JzLgorCisKKzQuMDIgICAgICAgICAgIDIwMDQtMDYtMTAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0gQysrIExaTUEgRW5jb2Rlci9EZWNvZGVyIGNvZGUgbm93IGlzIG1vcmUgcG9ydGFibGUKKyAgYW5kIGl0IGNhbiBiZSBjb21waWxlZCBieSBHQ0Mgb24gTGludXguCisKKworNC4wMSAgICAgICAgICAgMjAwNC0wMi0xNQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLSBTb21lIGRldGVjdGlvbiBvZiBkYXRhIGNvcnJ1cHRpb24gd2FzIGVuYWJsZWQuCisgICAgTHptYURlY29kZS5jIC8gUmFuZ2VEZWNvZGVyUmVhZEJ5dGUKKyAgICAuLi4uLgorICAgIHsKKyAgICAgIHJkLT5FeHRyYUJ5dGVzID0gMTsKKyAgICAgIHJldHVybiAweEZGOworICAgIH0KKworCis0LjAwICAgICAgICAgICAyMDA0LTAyLTEzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistIE9yaWdpbmFsIHZlcnNpb24gb2YgTFpNQSBTREsKIAogCiAKIEhJU1RPUlkgb2YgdGhlIExaTUEKIC0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgMjAwMS0yMDA3OiAgSW1wcm92ZW1lbnRzIHRvIExaTUEgY29tcHJlc3NpbmcvZGVjb21wcmVzc2luZyBjb2RlLAotCSAgICAgIGtlZXBpbmcgY29tcGF0aWJpbGl0eSB3aXRoIG9yaWdpbmFsIExaTUEgZm9ybWF0CisgIDIwMDEtMjAwODogIEltcHJvdmVtZW50cyB0byBMWk1BIGNvbXByZXNzaW5nL2RlY29tcHJlc3NpbmcgY29kZSwKKyAgICAgICAgICAgICAga2VlcGluZyBjb21wYXRpYmlsaXR5IHdpdGggb3JpZ2luYWwgTFpNQSBmb3JtYXQKICAgMTk5Ni0yMDAxOiAgRGV2ZWxvcG1lbnQgb2YgTFpNQSBjb21wcmVzc2lvbiBmb3JtYXQKIAogICBTb21lIG1pbGVzdG9uZXM6CmRpZmYgLS1naXQgYS9saWJfZ2VuZXJpYy9sem1hL2ltcG9ydF9sem1hc2RrLnNoIGIvbGliX2dlbmVyaWMvbHptYS9pbXBvcnRfbHptYXNkay5zaAppbmRleCA1MjEyZTQ4Li4xZTBmNjg2IDEwMDY0NAotLS0gYS9saWJfZ2VuZXJpYy9sem1hL2ltcG9ydF9sem1hc2RrLnNoCisrKyBiL2xpYl9nZW5lcmljL2x6bWEvaW1wb3J0X2x6bWFzZGsuc2gKQEAgLTE3LDE0ICsxNywxMiBAQAogCiBCQVNFTkFNRT1gYmFzZW5hbWUgJDEgLnRhci5iejJgCiBUTVBESVI9L3RtcC90bXBfbGliXyRCQVNFTkFNRQotRklMRVM9IkMvQ29tcHJlc3MvTHptYS9Mem1hRGVjb2RlLmgKLSAgICAgIEMvQ29tcHJlc3MvTHptYS9Mem1hVHlwZXMuaAotICAgICAgQy9Db21wcmVzcy9Mem1hL0x6bWFEZWNvZGUuYworRklMRVM9IkMvTHptYURlYy5oCisgICAgICBDL1R5cGVzLmgKKyAgICAgIEMvTHptYURlYy5jCiAgICAgICBoaXN0b3J5LnR4dAotICAgICAgTEdQTC50eHQKICAgICAgIGx6bWEudHh0IgogCi0KIG1rZGlyIC1wICRUTVBESVIKIGVjaG8gIlVudGFyICQxIC0+ICRUTVBESVIiCiB0YXIgLWp4ZiAkMSAtQyAkVE1QRElSCmRpZmYgLS1naXQgYS9saWJfZ2VuZXJpYy9sem1hL2xpY2Vuc2UudHh0IGIvbGliX2dlbmVyaWMvbHptYS9saWNlbnNlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGI5ODIwCi0tLSAvZGV2L251bGwKKysrIGIvbGliX2dlbmVyaWMvbHptYS9saWNlbnNlLnR4dApAQCAtMCwwICsxLDMgQEAKKyAgICAgICAgICAgICAgIExpY2Vuc2UKKworTFpNQSBTREsgaXMgcGxhY2VkIGluIHRoZSBwdWJsaWMgZG9tYWluLgpkaWZmIC0tZ2l0IGEvbGliX2dlbmVyaWMvbHptYS9sem1hLnR4dCBiL2xpYl9nZW5lcmljL2x6bWEvbHptYS50eHQKaW5kZXggNWYxYTBjOS4uYWEyMGY5ZCAxMDA2NDQKLS0tIGEvbGliX2dlbmVyaWMvbHptYS9sem1hLnR4dAorKysgYi9saWJfZ2VuZXJpYy9sem1hL2x6bWEudHh0CkBAIC0xLDggKzEsNiBAQAotTFpNQSBTREsgNC41NworTFpNQSBTREsgNC42NQogLS0tLS0tLS0tLS0tLQogCi1MWk1BIFNESyAgIENvcHlyaWdodCAoQykgMTk5OS0yMDA3IElnb3IgUGF2bG92Ci0KIExaTUEgU0RLIHByb3ZpZGVzIHRoZSBkb2N1bWVudGF0aW9uLCBzYW1wbGVzLCBoZWFkZXIgZmlsZXMsIGxpYnJhcmllcywKIGFuZCB0b29scyB5b3UgbmVlZCB0byBkZXZlbG9wIGFwcGxpY2F0aW9ucyB0aGF0IHVzZSBMWk1BIGNvbXByZXNzaW9uLgogCkBAIC0yMCw3MCArMTgsNyBAQAogTElDRU5TRQogLS0tLS0tLQogCi1MWk1BIFNESyBpcyBhdmFpbGFibGUgdW5kZXIgYW55IG9mIHRoZSBmb2xsb3dpbmcgbGljZW5zZXM6Ci0KLTEpIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR05VIExHUEwpCi0yKSBDb21tb24gUHVibGljIExpY2Vuc2UgKENQTCkKLTMpIFNpbXBsaWZpZWQgbGljZW5zZSBmb3IgdW5tb2RpZmllZCBjb2RlIChyZWFkIFNQRUNJQUwgRVhDRVBUSU9OKQotNCkgUHJvcHJpZXRhcnkgbGljZW5zZQotCi1JdCBtZWFucyB0aGF0IHlvdSBjYW4gc2VsZWN0IG9uZSBvZiB0aGVzZSBmb3VyIG9wdGlvbnMgYW5kIGZvbGxvdyBydWxlcyBvZiB0aGF0IGxpY2Vuc2UuCi0KLQotMSwyKSBHTlUgTEdQTCBhbmQgQ1BMIGxpY2Vuc2VzIGFyZSBwcmV0dHkgc2ltaWxhciBhbmQgYm90aCB0aGVzZQotbGljZW5zZXMgYXJlIGNsYXNzaWZpZWQgYXMKLSAtICJGcmVlIHNvZnR3YXJlIGxpY2Vuc2VzIiBhdCBodHRwOi8vd3d3LmdudS5vcmcvCi0gLSAiT1NJLWFwcHJvdmVkIiBhdCBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnLwotCi0KLTMpIFNQRUNJQUwgRVhDRVBUSU9OCi0KLUlnb3IgUGF2bG92LCBhcyB0aGUgYXV0aG9yIG9mIHRoaXMgY29kZSwgZXhwcmVzc2x5IHBlcm1pdHMgeW91Ci10byBzdGF0aWNhbGx5IG9yIGR5bmFtaWNhbGx5IGxpbmsgeW91ciBjb2RlIChvciBiaW5kIGJ5IG5hbWUpCi10byB0aGUgZmlsZXMgZnJvbSBMWk1BIFNESyB3aXRob3V0IHN1YmplY3RpbmcgeW91ciBsaW5rZWQKLWNvZGUgdG8gdGhlIHRlcm1zIG9mIHRoZSBDUEwgb3IgR05VIExHUEwuCi1BbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMgdG8gZmlsZXMgZnJvbSBMWk1BIFNESywgaG93ZXZlciwKLWFyZSBzdWJqZWN0IHRvIHRoZSBHTlUgTEdQTCBvciBDUEwgdGVybXMuCi0KLVNQRUNJQUwgRVhDRVBUSU9OIGFsbG93cyB5b3UgdG8gdXNlIExaTUEgU0RLIGluIGFwcGxpY2F0aW9ucyB3aXRoIGNsb3NlZCBjb2RlLAotd2hpbGUgeW91IGtlZXAgTFpNQSBTREsgY29kZSB1bm1vZGlmaWVkLgotCi0KLVNQRUNJQUwgRVhDRVBUSU9OICMyOiBJZ29yIFBhdmxvdiwgYXMgdGhlIGF1dGhvciBvZiB0aGlzIGNvZGUsIGV4cHJlc3NseSBwZXJtaXRzCi15b3UgdG8gdXNlIHRoaXMgY29kZSB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBjb250YWluZWQgaW4gdGhlIExpY2Vuc2UKLUFncmVlbWVudCB5b3UgaGF2ZSBmb3IgYW55IHByZXZpb3VzIHZlcnNpb24gb2YgTFpNQSBTREsgZGV2ZWxvcGVkIGJ5IElnb3IgUGF2bG92LgotCi1TUEVDSUFMIEVYQ0VQVElPTiAjMiBhbGxvd3Mgb3duZXJzIG9mIHByb3ByaWV0YXJ5IGxpY2Vuc2VzIHRvIHVzZSBsYXRlc3QgdmVyc2lvbgotb2YgTFpNQSBTREsgYXMgdXBkYXRlIGZvciBwcmV2aW91cyB2ZXJzaW9ucy4KLQotCi1TUEVDSUFMIEVYQ0VQVElPTiAjMzogSWdvciBQYXZsb3YsIGFzIHRoZSBhdXRob3Igb2YgdGhpcyBjb2RlLCBleHByZXNzbHkgcGVybWl0cwoteW91IHRvIHVzZSBjb2RlIG9mIHRoZSBmb2xsb3dpbmcgZmlsZXM6Ci1CcmFuY2hUeXBlcy5oLCBMem1hVHlwZXMuaCwgTHptYVRlc3QuYywgTHptYVN0YXRlVGVzdC5jLCBMem1hQWxvbmUuY3BwLAotTHptYUFsb25lLmNzLCBMem1hQWxvbmUuamF2YQotYXMgcHVibGljIGRvbWFpbiBjb2RlLgotCi0KLTQpIFByb3ByaWV0YXJ5IGxpY2Vuc2UKLQotTFpNQSBTREsgYWxzbyBjYW4gYmUgYXZhaWxhYmxlIHVuZGVyIGEgcHJvcHJpZXRhcnkgbGljZW5zZSB3aGljaAotY2FuIGluY2x1ZGU6Ci0KLTEpIFJpZ2h0IHRvIG1vZGlmeSBjb2RlIHdpdGhvdXQgc3ViamVjdGluZyBtb2RpZmllZCBjb2RlIHRvIHRoZQotdGVybXMgb2YgdGhlIENQTCBvciBHTlUgTEdQTAotMikgVGVjaG5pY2FsIHN1cHBvcnQgZm9yIGNvZGUKLQotVG8gcmVxdWVzdCBzdWNoIHByb3ByaWV0YXJ5IGxpY2Vuc2Ugb3IgYW55IGFkZGl0aW9uYWwgY29uc3VsdGF0aW9ucywKLXNlbmQgZW1haWwgbWVzc2FnZSBmcm9tIHRoYXQgcGFnZToKLWh0dHA6Ly93d3cuNy16aXAub3JnL3N1cHBvcnQuaHRtbAotCi0KLVlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLUxpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLUZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLQotWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgQ29tbW9uIFB1YmxpYyBMaWNlbnNlCi1hbG9uZyB3aXRoIHRoaXMgbGlicmFyeS4KK0xaTUEgU0RLIGlzIHdyaXR0ZW4gYW5kIHBsYWNlZCBpbiB0aGUgcHVibGljIGRvbWFpbiBieSBJZ29yIFBhdmxvdi4KIAogCiBMWk1BIFNESyBDb250ZW50cwpAQCAtOTEsODcgKzI2LDcxIEBACiAKIExaTUEgU0RLIGluY2x1ZGVzOgogCi0gIC0gQysrIHNvdXJjZSBjb2RlIG9mIExaTUEgY29tcHJlc3NpbmcgYW5kIGRlY29tcHJlc3NpbmcKLSAgLSBBTlNJLUMgY29tcGF0aWJsZSBzb3VyY2UgY29kZSBmb3IgTFpNQSBkZWNvbXByZXNzaW5nCi0gIC0gQyMgc291cmNlIGNvZGUgZm9yIExaTUEgY29tcHJlc3NpbmcgYW5kIGRlY29tcHJlc3NpbmcKLSAgLSBKYXZhIHNvdXJjZSBjb2RlIGZvciBMWk1BIGNvbXByZXNzaW5nIGFuZCBkZWNvbXByZXNzaW5nCisgIC0gQU5TSS1DL0MrKy9DIy9KYXZhIHNvdXJjZSBjb2RlIGZvciBMWk1BIGNvbXByZXNzaW5nIGFuZCBkZWNvbXByZXNzaW5nCiAgIC0gQ29tcGlsZWQgZmlsZS0+ZmlsZSBMWk1BIGNvbXByZXNzaW5nL2RlY29tcHJlc3NpbmcgcHJvZ3JhbSBmb3IgV2luZG93cyBzeXN0ZW0KIAotQU5TSS1DIExaTUEgZGVjb21wcmVzc2lvbiBjb2RlIHdhcyBwb3J0ZWQgZnJvbSBvcmlnaW5hbCBDKysgc291cmNlcyB0byBDLgotQWxzbyBpdCB3YXMgc2ltcGxpZmllZCBhbmQgb3B0aW1pemVkIGZvciBjb2RlIHNpemUuCi1CdXQgaXQgaXMgZnVsbHkgY29tcGF0aWJsZSB3aXRoIExaTUEgZnJvbSA3LVppcC4KLQogCiBVTklYL0xpbnV4IHZlcnNpb24KIC0tLS0tLS0tLS0tLS0tLS0tLQotVG8gY29tcGlsZSBDKysgdmVyc2lvbiBvZiBmaWxlLT5maWxlIExaTUEsIGdvIHRvIGRpcmVjdG9yeQotQy83emlwL0NvbXByZXNzL0xaTUFfQWxvbmUKLWFuZCB0eXBlICJtYWtlIiBvciAibWFrZSBjbGVhbiBhbGwiIHRvIHJlY29tcGlsZSBhbGwuCitUbyBjb21waWxlIEMrKyB2ZXJzaW9uIG9mIGZpbGUtPmZpbGUgTFpNQSBlbmNvZGluZywgZ28gdG8gZGlyZWN0b3J5CitDKysvN3ppcC9Db21wcmVzcy9MWk1BX0Fsb25lCithbmQgY2FsbCBtYWtlIHRvIHJlY29tcGlsZSBpdDoKKyAgbWFrZSAtZiBtYWtlZmlsZS5nY2MgY2xlYW4gYWxsCiAKIEluIHNvbWUgVU5JWC9MaW51eCB2ZXJzaW9ucyB5b3UgbXVzdCBjb21waWxlIExaTUEgd2l0aCBzdGF0aWMgbGlicmFyaWVzLgotVG8gY29tcGlsZSB3aXRoIHN0YXRpYyBsaWJyYXJpZXMsIGNoYW5nZSBzdHJpbmcgaW4gbWFrZWZpbGUKLUxJQiA9IC1sbQotdG8gc3RyaW5nCitUbyBjb21waWxlIHdpdGggc3RhdGljIGxpYnJhcmllcywgeW91IGNhbiB1c2UKIExJQiA9IC1sbSAtc3RhdGljCiAKIAogRmlsZXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQwkgLSBDIHNvdXJjZSBjb2RlCi1DUFAJIC0gQ1BQIHNvdXJjZSBjb2RlCi1DUwkgLSBDIyBzb3VyY2UgY29kZQotSmF2YQkgLSBKYXZhIHNvdXJjZSBjb2RlCi1sem1hLnR4dCAtIExaTUEgU0RLIGRlc2NyaXB0aW9uICh0aGlzIGZpbGUpCitsem1hLnR4dCAgICAgLSBMWk1BIFNESyBkZXNjcmlwdGlvbiAodGhpcyBmaWxlKQogN3pGb3JtYXQudHh0IC0gN3ogRm9ybWF0IGRlc2NyaXB0aW9uCi03ekMudHh0ICAtIDd6IEFOU0ktQyBEZWNvZGVyIGRlc2NyaXB0aW9uICh0aGlzIGZpbGUpCis3ekMudHh0ICAgICAgLSA3eiBBTlNJLUMgRGVjb2RlciBkZXNjcmlwdGlvbgogbWV0aG9kcy50eHQgIC0gQ29tcHJlc3Npb24gbWV0aG9kIElEcyBmb3IgLjd6Ci1MR1BMLnR4dCAtIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotQ1BMLmh0bWwgLSBDb21tb24gUHVibGljIExpY2Vuc2UKLWx6bWEuZXhlIC0gQ29tcGlsZWQgZmlsZS0+ZmlsZSBMWk1BIGVuY29kZXIvZGVjb2RlciBmb3IgV2luZG93cwotaGlzdG9yeS50eHQgLSBoaXN0b3J5IG9mIHRoZSBMWk1BIFNESworbHptYS5leGUgICAgIC0gQ29tcGlsZWQgZmlsZS0+ZmlsZSBMWk1BIGVuY29kZXIvZGVjb2RlciBmb3IgV2luZG93cworaGlzdG9yeS50eHQgIC0gaGlzdG9yeSBvZiB0aGUgTFpNQSBTREsKIAogCiBTb3VyY2UgY29kZSBzdHJ1Y3R1cmUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1DICAtIEMgZmlsZXMKLSAgICBDb21wcmVzcyAtIGZpbGVzIHJlbGF0ZWQgdG8gY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbgotICAgICAgTHogICAgIC0gZmlsZXMgcmVsYXRlZCB0byBMWiAoTGVtcGVsLVppdikgY29tcHJlc3Npb24gYWxnb3JpdGhtCi0gICAgICBMem1hICAgLSBBTlNJLUMgY29tcGF0aWJsZSBMWk1BIGRlY29tcHJlc3NvcgorQy8gIC0gQyBmaWxlcworICAgICAgICA3ekNyYyouKiAgIC0gQ1JDIGNvZGUKKyAgICAgICAgQWxsb2MuKiAgICAtIE1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucworICAgICAgICBCcmEqLiogICAgIC0gRmlsdGVycyBmb3IgeDg2LCBJQS02NCwgQVJNLCBBUk0tVGh1bWIsIFBvd2VyUEMgYW5kIFNQQVJDIGNvZGUKKyAgICAgICAgTHpGaW5kLiogICAtIE1hdGNoIGZpbmRlciBmb3IgTFogKExaTUEpIGVuY29kZXJzCisgICAgICAgIEx6RmluZE10LiogLSBNYXRjaCBmaW5kZXIgZm9yIExaIChMWk1BKSBlbmNvZGVycyBmb3IgbXVsdGl0aHJlYWRpbmcgZW5jb2RpbmcKKyAgICAgICAgTHpIYXNoLmggICAtIEFkZGl0aW9uYWwgZmlsZSBmb3IgTFogbWF0Y2ggZmluZGVyCisgICAgICAgIEx6bWFEZWMuKiAgLSBMWk1BIGRlY29kaW5nCisgICAgICAgIEx6bWFFbmMuKiAgLSBMWk1BIGVuY29kaW5nCisgICAgICAgIEx6bWFMaWIuKiAgLSBMWk1BIExpYnJhcnkgZm9yIERMTCBjYWxsaW5nCisgICAgICAgIFR5cGVzLmggICAgLSBCYXNpYyB0eXBlcyBmb3IgYW5vdGhlciAuYyBmaWxlcworCVRocmVhZHMuKiAgLSBUaGUgY29kZSBmb3IgbXVsdGl0aHJlYWRpbmcuCiAKLQlMem1hRGVjb2RlLmggIC0gaW50ZXJmYWNlIGZvciBMWk1BIGRlY29kaW5nIG9uIEFOU0ktQwotCUx6bWFEZWNvZGUuYwkgIC0gTFpNQSBkZWNvZGluZyBvbiBBTlNJLUMgKG5ldyBmYXN0ZXN0IHZlcnNpb24pCi0JTHptYURlY29kZVNpemUuYyAgLSBMWk1BIGRlY29kaW5nIG9uIEFOU0ktQyAob2xkIHNpemUtb3B0aW1pemVkIHZlcnNpb24pCi0JTHptYVRlc3QuYwkgIC0gdGVzdCBhcHBsaWNhdGlvbiB0aGF0IGRlY29kZXMgTFpNQSBlbmNvZGVkIGZpbGUKLQlMem1hVHlwZXMuaAkgIC0gYmFzaWMgdHlwZXMgZm9yIExaTUEgRGVjb2RlcgotCUx6bWFTdGF0ZURlY29kZS5oIC0gaW50ZXJmYWNlIGZvciBMWk1BIGRlY29kaW5nIChTdGF0ZSB2ZXJzaW9uKQotCUx6bWFTdGF0ZURlY29kZS5jIC0gTFpNQSBkZWNvZGluZyBvbiBBTlNJLUMgKFN0YXRlIHZlcnNpb24pCi0JTHptYVN0YXRlVGVzdC5jICAgLSB0ZXN0IGFwcGxpY2F0aW9uIChTdGF0ZSB2ZXJzaW9uKQorICAgIEx6bWFMaWIgIC0gTFpNQSBMaWJyYXJ5ICguRExMIGZvciBXaW5kb3dzKQogCi0gICAgICBCcmFuY2gJICAgLSBGaWx0ZXJzIGZvciB4ODYsIElBLTY0LCBBUk0sIEFSTS1UaHVtYiwgUG93ZXJQQyBhbmQgU1BBUkMgY29kZQorICAgIEx6bWFVdGlsIC0gTFpNQSBVdGlsaXR5IChmaWxlLT5maWxlIExaTUEgZW5jb2Rlci9kZWNvZGVyKS4KIAogICAgIEFyY2hpdmUgLSBmaWxlcyByZWxhdGVkIHRvIGFyY2hpdmluZwotICAgICAgN3pfQyAgICAgLSA3eiBBTlNJLUMgRGVjb2RlcgorICAgICAgN3ogICAgIC0gN3ogQU5TSS1DIERlY29kZXIKIAotCi1DUFAgLS0gQ1BQIGZpbGVzCitDUFAvIC0tIENQUCBmaWxlcwogCiAgIENvbW1vbiAgLSBjb21tb24gZmlsZXMgZm9yIEMrKyBwcm9qZWN0cwogICBXaW5kb3dzIC0gY29tbW9uIGZpbGVzIGZvciBXaW5kb3dzIHJlbGF0ZWQgY29kZQotICA3emlwCSAgLSBmaWxlcyByZWxhdGVkIHRvIDctWmlwIFByb2plY3QKKworICA3emlwICAgIC0gZmlsZXMgcmVsYXRlZCB0byA3LVppcCBQcm9qZWN0CiAKICAgICBDb21tb24gICAtIGNvbW1vbiBmaWxlcyBmb3IgNy1aaXAKIAogICAgIENvbXByZXNzIC0gZmlsZXMgcmVsYXRlZCB0byBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uCiAKLSAgICAgIExaICAgICAtIGZpbGVzIHJlbGF0ZWQgdG8gTFogKExlbXBlbC1aaXYpIGNvbXByZXNzaW9uIGFsZ29yaXRobQotCi0gICAgICBDb3B5CSAgIC0gQ29weSBjb2RlcgorICAgICAgQ29weSAgICAgICAgIC0gQ29weSBjb2RlcgogICAgICAgUmFuZ2VDb2RlciAgIC0gUmFuZ2UgQ29kZXIgKHNwZWNpYWwgY29kZSBvZiBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uKQotICAgICAgTFpNQQkgICAtIExaTUEgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiBvbiBDKysKKyAgICAgIExaTUEgICAgICAgICAtIExaTUEgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiBvbiBDKysKICAgICAgIExaTUFfQWxvbmUgICAtIGZpbGUtPmZpbGUgTFpNQSBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uCi0KLSAgICAgIEJyYW5jaAkgICAtIEZpbHRlcnMgZm9yIHg4NiwgSUEtNjQsIEFSTSwgQVJNLVRodW1iLCBQb3dlclBDIGFuZCBTUEFSQyBjb2RlCisgICAgICBCcmFuY2ggICAgICAgLSBGaWx0ZXJzIGZvciB4ODYsIElBLTY0LCBBUk0sIEFSTS1UaHVtYiwgUG93ZXJQQyBhbmQgU1BBUkMgY29kZQogCiAgICAgQXJjaGl2ZSAtIGZpbGVzIHJlbGF0ZWQgdG8gYXJjaGl2aW5nCiAKQEAgLTE4MCw2NyArOTksNjEgQEAKIAogICAgIEJ1bmRsZXMgICAgLSBNb2R1bGVzIHRoYXQgYXJlIGJ1bmRsZXMgb2Ygb3RoZXIgbW9kdWxlcwogCi0gICAgICBBbG9uZTd6CQktIDd6ci5leGU6IFN0YW5kYWxvbmUgdmVyc2lvbiBvZiA3ei5leGUgdGhhdCBzdXBwb3J0cyBvbmx5IDd6L0xaTUEvQkNKL0JDSjIKLSAgICAgIEZvcm1hdDd6UgkJLSA3enIuZGxsOiBSZWR1Y2VkIHZlcnNpb24gb2YgN3phLmRsbDogZXh0cmFjdGluZy9jb21wcmVzc2luZyB0byA3ei9MWk1BL0JDSi9CQ0oyCi0gICAgICBGb3JtYXQ3ekV4dHJhY3RSCS0gN3p4ci5kbGw6IFJlZHVjZWQgdmVyc2lvbiBvZiA3enhhLmRsbDogZXh0cmFjdGluZyBmcm9tIDd6L0xaTUEvQkNKL0JDSjIuCisgICAgICBBbG9uZTd6ICAgICAgICAgICAtIDd6ci5leGU6IFN0YW5kYWxvbmUgdmVyc2lvbiBvZiA3ei5leGUgdGhhdCBzdXBwb3J0cyBvbmx5IDd6L0xaTUEvQkNKL0JDSjIKKyAgICAgIEZvcm1hdDd6UiAgICAgICAgIC0gN3pyLmRsbDogUmVkdWNlZCB2ZXJzaW9uIG9mIDd6YS5kbGw6IGV4dHJhY3RpbmcvY29tcHJlc3NpbmcgdG8gN3ovTFpNQS9CQ0ovQkNKMgorICAgICAgRm9ybWF0N3pFeHRyYWN0UiAgLSA3enhyLmRsbDogUmVkdWNlZCB2ZXJzaW9uIG9mIDd6eGEuZGxsOiBleHRyYWN0aW5nIGZyb20gN3ovTFpNQS9CQ0ovQkNKMi4KIAotICAgIFVJCSAgICAgIC0gVXNlciBJbnRlcmZhY2UgZmlsZXMKKyAgICBVSSAgICAgICAgLSBVc2VyIEludGVyZmFjZSBmaWxlcwogCi0gICAgICBDbGllbnQ3eiAtIFRlc3QgYXBwbGljYXRpb24gZm9yIDd6YS5kbGwsCTd6ci5kbGwsIDd6eHIuZGxsCisgICAgICBDbGllbnQ3eiAtIFRlc3QgYXBwbGljYXRpb24gZm9yIDd6YS5kbGwsICA3enIuZGxsLCA3enhyLmRsbAogICAgICAgQ29tbW9uICAgLSBDb21tb24gVUkgZmlsZXMKICAgICAgIENvbnNvbGUgIC0gQ29kZSBmb3IgY29uc29sZSBhcmNoaXZlcgogCiAKIAotQ1MgLSBDIyBmaWxlcworQ1MvIC0gQyMgZmlsZXMKICAgN3ppcAogICAgIENvbW1vbiAgIC0gc29tZSBjb21tb24gZmlsZXMgZm9yIDctWmlwCiAgICAgQ29tcHJlc3MgLSBmaWxlcyByZWxhdGVkIHRvIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24KICAgICAgIExaICAgICAtIGZpbGVzIHJlbGF0ZWQgdG8gTFogKExlbXBlbC1aaXYpIGNvbXByZXNzaW9uIGFsZ29yaXRobQotICAgICAgTFpNQQkgICAtIExaTUEgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbgorICAgICAgTFpNQSAgICAgICAgIC0gTFpNQSBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uCiAgICAgICBMem1hQWxvbmUgICAgLSBmaWxlLT5maWxlIExaTUEgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbgogICAgICAgUmFuZ2VDb2RlciAgIC0gUmFuZ2UgQ29kZXIgKHNwZWNpYWwgY29kZSBvZiBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uKQogCi1KYXZhICAtIEphdmEgZmlsZXMKK0phdmEvICAtIEphdmEgZmlsZXMKICAgU2V2ZW5aaXAKICAgICBDb21wcmVzc2lvbiAgICAtIGZpbGVzIHJlbGF0ZWQgdG8gY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbgotICAgICAgTFoJICAgLSBmaWxlcyByZWxhdGVkIHRvIExaIChMZW1wZWwtWml2KSBjb21wcmVzc2lvbiBhbGdvcml0aG0KLSAgICAgIExaTUEJICAgLSBMWk1BIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24KKyAgICAgIExaICAgICAgICAgICAtIGZpbGVzIHJlbGF0ZWQgdG8gTFogKExlbXBlbC1aaXYpIGNvbXByZXNzaW9uIGFsZ29yaXRobQorICAgICAgTFpNQSAgICAgICAgIC0gTFpNQSBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uCiAgICAgICBSYW5nZUNvZGVyICAgLSBSYW5nZSBDb2RlciAoc3BlY2lhbCBjb2RlIG9mIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24pCiAKKwogQy9DKysgc291cmNlIGNvZGUgb2YgTFpNQSBTREsgaXMgcGFydCBvZiA3LVppcCBwcm9qZWN0LgotCi1Zb3UgY2FuIGZpbmQgQU5TSS1DIExaTUEgZGVjb21wcmVzc2luZyBjb2RlIGF0IGZvbGRlcgotICBDLzd6aXAvQ29tcHJlc3MvTHptYQotNy1aaXAgZG9lc24ndCB1c2UgdGhhdCBBTlNJLUMgTFpNQSBjb2RlIGFuZCB0aGF0IGNvZGUgd2FzIGRldmVsb3BlZAotc3BlY2lhbGx5IGZvciB0aGlzIFNESy4gQW5kIGZpbGVzIGZyb20gQy83emlwL0NvbXByZXNzL0x6bWEgZG8gbm90IG5lZWQKLWZpbGVzIGZyb20gb3RoZXIgZGlyZWN0b3JpZXMgb2YgU0RLIGZvciBjb21waWxpbmcuCi0KIDctWmlwIHNvdXJjZSBjb2RlIGNhbiBiZSBkb3dubG9hZGVkIGZyb20gNy1aaXAncyBTb3VyY2VGb3JnZSBwYWdlOgogCiAgIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvc2V2ZW56aXAvCiAKIAorCiBMWk1BIGZlYXR1cmVzCiAtLS0tLS0tLS0tLS0tCiAgIC0gVmFyaWFibGUgZGljdGlvbmFyeSBzaXplICh1cCB0byAxIEdCKQotICAtIEVzdGltYXRlZCBjb21wcmVzc2luZyBzcGVlZDogYWJvdXQgMSBNQi9zIG9uIDEgR0h6IENQVQorICAtIEVzdGltYXRlZCBjb21wcmVzc2luZyBzcGVlZDogYWJvdXQgMiBNQi9zIG9uIDIgR0h6IENQVQogICAtIEVzdGltYXRlZCBkZWNvbXByZXNzaW5nIHNwZWVkOgotICAgICAgLSA4LTEyIE1CL3Mgb24gMSBHSHogSW50ZWwgUGVudGl1bSAzIG9yIEFNRCBBdGhsb24KLSAgICAgIC0gNTAwLTEwMDAgS0IvcyBvbiAxMDAgTUh6IEFSTSwgTUlQUywgUG93ZXJQQyBvciBvdGhlciBzaW1wbGUgUklTQwotICAtIFNtYWxsIG1lbW9yeSByZXF1aXJlbWVudHMgZm9yIGRlY29tcHJlc3NpbmcgKDgtMzIgS0IgKyBEaWN0aW9uYXJ5U2l6ZSkKLSAgLSBTbWFsbCBjb2RlIHNpemUgZm9yIGRlY29tcHJlc3Npbmc6IDItOCBLQiAoZGVwZW5kaW5nIGZyb20KLSAgICBzcGVlZCBvcHRpbWl6YXRpb25zKQorICAgICAgLSAyMC0zMCBNQi9zIG9uIDIgR0h6IENvcmUgMiBvciBBTUQgQXRobG9uIDY0CisgICAgICAtIDEtMiBNQi9zIG9uIDIwMCBNSHogQVJNLCBNSVBTLCBQb3dlclBDIG9yIG90aGVyIHNpbXBsZSBSSVNDCisgIC0gU21hbGwgbWVtb3J5IHJlcXVpcmVtZW50cyBmb3IgZGVjb21wcmVzc2luZyAoMTYgS0IgKyBEaWN0aW9uYXJ5U2l6ZSkKKyAgLSBTbWFsbCBjb2RlIHNpemUgZm9yIGRlY29tcHJlc3Npbmc6IDUtOCBLQgogCiBMWk1BIGRlY29kZXIgdXNlcyBvbmx5IGludGVnZXIgb3BlcmF0aW9ucyBhbmQgY2FuIGJlCiBpbXBsZW1lbnRlZCBpbiBhbnkgbW9kZXJuIDMyLWJpdCBDUFUgKG9yIG9uIDE2LWJpdCBDUFUgd2l0aCBzb21lIGNvbmRpdGlvbnMpLgogCi1Tb21lIGNyaXRpY2FsIG9wZXJhdGlvbnMgdGhhdCBhZmZlY3QgdG8gc3BlZWQgb2YgTFpNQSBkZWNvbXByZXNzaW9uOgorU29tZSBjcml0aWNhbCBvcGVyYXRpb25zIHRoYXQgYWZmZWN0IHRoZSBzcGVlZCBvZiBMWk1BIGRlY29tcHJlc3Npb246CiAgIDEpIDMyKjE2IGJpdCBpbnRlZ2VyIG11bHRpcGx5CiAgIDIpIE1pc3NwcmVkaWN0ZWQgYnJhbmNoZXMgKHBlbmFsdHkgbW9zdGx5IGRlcGVuZHMgZnJvbSBwaXBlbGluZSBsZW5ndGgpCiAgIDMpIDMyLWJpdCBzaGlmdCBhbmQgYXJpdGhtZXRpYyBvcGVyYXRpb25zCiAKLVNwZWVkIG9mIExaTUEgZGVjb21wcmVzc2luZyBtb3N0bHkgZGVwZW5kcyBmcm9tIENQVSBzcGVlZC4KK1RoZSBzcGVlZCBvZiBMWk1BIGRlY29tcHJlc3NpbmcgbW9zdGx5IGRlcGVuZHMgZnJvbSBDUFUgc3BlZWQuCiBNZW1vcnkgc3BlZWQgaGFzIG5vIGJpZyBtZWFuaW5nLiBCdXQgaWYgeW91ciBDUFUgaGFzIHNtYWxsIGRhdGEgY2FjaGUsCiBvdmVyYWxsIHdlaWdodCBvZiBtZW1vcnkgc3BlZWQgd2lsbCBzbGlnaHRseSBpbmNyZWFzZS4KIApAQCAtMjUxLDcgKzE2NCw3IEBACiBVc2luZyBMWk1BIGVuY29kZXIvZGVjb2RlciBleGVjdXRhYmxlCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Vc2FnZToJTFpNQSA8ZXxkPiBpbnB1dEZpbGUgb3V0cHV0RmlsZSBbPHN3aXRjaGVzPi4uLl0KK1VzYWdlOiAgTFpNQSA8ZXxkPiBpbnB1dEZpbGUgb3V0cHV0RmlsZSBbPHN3aXRjaGVzPi4uLl0KIAogICBlOiBlbmNvZGUgZmlsZQogCkBAIC0yNjAsMTEgKzE3MywxMSBAQAogICBiOiBCZW5jaG1hcmsuIFRoZXJlIGFyZSB0d28gdGVzdHM6IGNvbXByZXNzaW5nIGFuZCBkZWNvbXByZXNzaW5nCiAgICAgIHdpdGggTFpNQSBtZXRob2QuIEJlbmNobWFyayBzaG93cyByYXRpbmcgaW4gTUlQUyAobWlsbGlvbgogICAgICBpbnN0cnVjdGlvbnMgcGVyIHNlY29uZCkuIFJhdGluZyB2YWx1ZSBpcyBjYWxjdWxhdGVkIGZyb20KLSAgICAgbWVhc3VyZWQgc3BlZWQgYW5kIGl0IGlzIG5vcm1hbGl6ZWQgd2l0aCBBTUQgQXRobG9uIDY0IFgyIENQVQotICAgICByZXN1bHRzLiBBbHNvIEJlbmNobWFyayBjaGVja3MgcG9zc2libGUgaGFyZHdhcmUgZXJyb3JzIChSQU0KKyAgICAgbWVhc3VyZWQgc3BlZWQgYW5kIGl0IGlzIG5vcm1hbGl6ZWQgd2l0aCBJbnRlbCdzIENvcmUgMiByZXN1bHRzLgorICAgICBBbHNvIEJlbmNobWFyayBjaGVja3MgcG9zc2libGUgaGFyZHdhcmUgZXJyb3JzIChSQU0KICAgICAgZXJyb3JzIGluIG1vc3QgY2FzZXMpLiBCZW5jaG1hcmsgdXNlcyB0aGVzZSBzZXR0aW5nczoKLSAgICAgKC1hMSwgLWQyMSwgLWZiMzIsIC1tZmJ0NCkuIFlvdSBjYW4gY2hhbmdlIG9ubHkgLWQuIEFsc28geW91Ci0gICAgIGNhbiBjaGFuZ2UgbnVtYmVyIG9mIGl0ZXJhdGlvbnMuIEV4YW1wbGUgZm9yIDMwIGl0ZXJhdGlvbnM6CisgICAgICgtYTEsIC1kMjEsIC1mYjMyLCAtbWZidDQpLiBZb3UgY2FuIGNoYW5nZSBvbmx5IC1kIHBhcmFtZXRlci4KKyAgICAgQWxzbyB5b3UgY2FuIGNoYW5nZSB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMuIEV4YW1wbGUgZm9yIDMwIGl0ZXJhdGlvbnM6CiAgICAgICAgTFpNQSBiIDMwCiAgICAgIERlZmF1bHQgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgaXMgMTAuCiAKQEAgLTI3Miw1MiArMTg1LDUyIEBACiAKIAogICAtYXtOfTogIHNldCBjb21wcmVzc2lvbiBtb2RlIDAgPSBmYXN0LCAxID0gbm9ybWFsCi0JICBkZWZhdWx0OiAxIChub3JtYWwpCisgICAgICAgICAgZGVmYXVsdDogMSAobm9ybWFsKQogCiAgIGR7Tn06ICAgU2V0cyBEaWN0aW9uYXJ5IHNpemUgLSBbMCwgMzBdLCBkZWZhdWx0OiAyMyAoOE1CKQotCSAgVGhlIG1heGltdW0gdmFsdWUgZm9yIGRpY3Rpb25hcnkgc2l6ZSBpcyAxIEdCID0gMl4zMCBieXRlcy4KLQkgIERpY3Rpb25hcnkgc2l6ZSBpcyBjYWxjdWxhdGVkIGFzIERpY3Rpb25hcnlTaXplID0gMl5OIGJ5dGVzLgotCSAgRm9yIGRlY29tcHJlc3NpbmcgZmlsZSBjb21wcmVzc2VkIGJ5IExaTUEgbWV0aG9kIHdpdGggZGljdGlvbmFyeQotCSAgc2l6ZSBEID0gMl5OIHlvdSBuZWVkIGFib3V0IEQgYnl0ZXMgb2YgbWVtb3J5IChSQU0pLgorICAgICAgICAgIFRoZSBtYXhpbXVtIHZhbHVlIGZvciBkaWN0aW9uYXJ5IHNpemUgaXMgMSBHQiA9IDJeMzAgYnl0ZXMuCisgICAgICAgICAgRGljdGlvbmFyeSBzaXplIGlzIGNhbGN1bGF0ZWQgYXMgRGljdGlvbmFyeVNpemUgPSAyXk4gYnl0ZXMuCisgICAgICAgICAgRm9yIGRlY29tcHJlc3NpbmcgZmlsZSBjb21wcmVzc2VkIGJ5IExaTUEgbWV0aG9kIHdpdGggZGljdGlvbmFyeQorICAgICAgICAgIHNpemUgRCA9IDJeTiB5b3UgbmVlZCBhYm91dCBEIGJ5dGVzIG9mIG1lbW9yeSAoUkFNKS4KIAogICAtZmJ7Tn06IHNldCBudW1iZXIgb2YgZmFzdCBieXRlcyAtIFs1LCAyNzNdLCBkZWZhdWx0OiAxMjgKLQkgIFVzdWFsbHkgYmlnIG51bWJlciBnaXZlcyBhIGxpdHRsZSBiaXQgYmV0dGVyIGNvbXByZXNzaW9uIHJhdGlvCi0JICBhbmQgc2xvd2VyIGNvbXByZXNzaW9uIHByb2Nlc3MuCisgICAgICAgICAgVXN1YWxseSBiaWcgbnVtYmVyIGdpdmVzIGEgbGl0dGxlIGJpdCBiZXR0ZXIgY29tcHJlc3Npb24gcmF0aW8KKyAgICAgICAgICBhbmQgc2xvd2VyIGNvbXByZXNzaW9uIHByb2Nlc3MuCiAKICAgLWxje059OiBzZXQgbnVtYmVyIG9mIGxpdGVyYWwgY29udGV4dCBiaXRzIC0gWzAsIDhdLCBkZWZhdWx0OiAzCi0JICBTb21ldGltZXMgbGM9NCBnaXZlcyBnYWluIGZvciBiaWcgZmlsZXMuCisgICAgICAgICAgU29tZXRpbWVzIGxjPTQgZ2l2ZXMgZ2FpbiBmb3IgYmlnIGZpbGVzLgogCiAgIC1scHtOfTogc2V0IG51bWJlciBvZiBsaXRlcmFsIHBvcyBiaXRzIC0gWzAsIDRdLCBkZWZhdWx0OiAwCi0JICBscCBzd2l0Y2ggaXMgaW50ZW5kZWQgZm9yIHBlcmlvZGljYWwgZGF0YSB3aGVuIHBlcmlvZCBpcwotCSAgZXF1YWwgMl5OLiBGb3IgZXhhbXBsZSwgZm9yIDMyLWJpdCAoNCBieXRlcykKLQkgIHBlcmlvZGljYWwgZGF0YSB5b3UgY2FuIHVzZSBscD0yLiBPZnRlbiBpdCdzIGJldHRlciB0byBzZXQgbGMwLAotCSAgaWYgeW91IGNoYW5nZSBscCBzd2l0Y2guCisgICAgICAgICAgbHAgc3dpdGNoIGlzIGludGVuZGVkIGZvciBwZXJpb2RpY2FsIGRhdGEgd2hlbiBwZXJpb2QgaXMKKyAgICAgICAgICBlcXVhbCAyXk4uIEZvciBleGFtcGxlLCBmb3IgMzItYml0ICg0IGJ5dGVzKQorICAgICAgICAgIHBlcmlvZGljYWwgZGF0YSB5b3UgY2FuIHVzZSBscD0yLiBPZnRlbiBpdCdzIGJldHRlciB0byBzZXQgbGMwLAorICAgICAgICAgIGlmIHlvdSBjaGFuZ2UgbHAgc3dpdGNoLgogCiAgIC1wYntOfTogc2V0IG51bWJlciBvZiBwb3MgYml0cyAtIFswLCA0XSwgZGVmYXVsdDogMgotCSAgcGIgc3dpdGNoIGlzIGludGVuZGVkIGZvciBwZXJpb2RpY2FsIGRhdGEKLQkgIHdoZW4gcGVyaW9kIGlzIGVxdWFsIDJeTi4KKyAgICAgICAgICBwYiBzd2l0Y2ggaXMgaW50ZW5kZWQgZm9yIHBlcmlvZGljYWwgZGF0YQorICAgICAgICAgIHdoZW4gcGVyaW9kIGlzIGVxdWFsIDJeTi4KIAogICAtbWZ7TUZfSUR9OiBzZXQgTWF0Y2ggRmluZGVyLiBEZWZhdWx0OiBidDQuCi0JICAgICAgQWxnb3JpdGhtcyBmcm9tIGhjKiBncm91cCBkb2Vzbid0IHByb3ZpZGUgZ29vZCBjb21wcmVzc2lvbgotCSAgICAgIHJhdGlvLCBidXQgdGhleSBvZnRlbiB3b3JrcyBwcmV0dHkgZmFzdCBpbiBjb21iaW5hdGlvbiB3aXRoCi0JICAgICAgZmFzdCBtb2RlICgtYTApLgorICAgICAgICAgICAgICBBbGdvcml0aG1zIGZyb20gaGMqIGdyb3VwIGRvZXNuJ3QgcHJvdmlkZSBnb29kIGNvbXByZXNzaW9uCisgICAgICAgICAgICAgIHJhdGlvLCBidXQgdGhleSBvZnRlbiB3b3JrcyBwcmV0dHkgZmFzdCBpbiBjb21iaW5hdGlvbiB3aXRoCisgICAgICAgICAgICAgIGZhc3QgbW9kZSAoLWEwKS4KIAotCSAgICAgIE1lbW9yeSByZXF1aXJlbWVudHMgZGVwZW5kIGZyb20gZGljdGlvbmFyeSBzaXplCi0JICAgICAgKHBhcmFtZXRlciAiZCIgaW4gdGFibGUgYmVsb3cpLgorICAgICAgICAgICAgICBNZW1vcnkgcmVxdWlyZW1lbnRzIGRlcGVuZCBmcm9tIGRpY3Rpb25hcnkgc2l6ZQorICAgICAgICAgICAgICAocGFyYW1ldGVyICJkIiBpbiB0YWJsZSBiZWxvdykuCiAKLQkgICAgICAgTUZfSUQJIE1lbW9yeQkJCSAgRGVzY3JpcHRpb24KKyAgICAgICAgICAgICAgIE1GX0lEICAgICBNZW1vcnkgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb24KIAotCQlidDIgICAgZCAqICA5LjUgKyA0TUIgIEJpbmFyeSBUcmVlIHdpdGggMiBieXRlcyBoYXNoaW5nLgotCQlidDMgICAgZCAqIDExLjUgKyA0TUIgIEJpbmFyeSBUcmVlIHdpdGggMyBieXRlcyBoYXNoaW5nLgotCQlidDQgICAgZCAqIDExLjUgKyA0TUIgIEJpbmFyeSBUcmVlIHdpdGggNCBieXRlcyBoYXNoaW5nLgotCQloYzQgICAgZCAqICA3LjUgKyA0TUIgIEhhc2ggQ2hhaW4gd2l0aCA0IGJ5dGVzIGhhc2hpbmcuCisgICAgICAgICAgICAgICAgYnQyICAgIGQgKiAgOS41ICsgNE1CICBCaW5hcnkgVHJlZSB3aXRoIDIgYnl0ZXMgaGFzaGluZy4KKyAgICAgICAgICAgICAgICBidDMgICAgZCAqIDExLjUgKyA0TUIgIEJpbmFyeSBUcmVlIHdpdGggMyBieXRlcyBoYXNoaW5nLgorICAgICAgICAgICAgICAgIGJ0NCAgICBkICogMTEuNSArIDRNQiAgQmluYXJ5IFRyZWUgd2l0aCA0IGJ5dGVzIGhhc2hpbmcuCisgICAgICAgICAgICAgICAgaGM0ICAgIGQgKiAgNy41ICsgNE1CICBIYXNoIENoYWluIHdpdGggNCBieXRlcyBoYXNoaW5nLgogCiAgIC1lb3M6ICAgd3JpdGUgRW5kIE9mIFN0cmVhbSBtYXJrZXIuIEJ5IGRlZmF1bHQgTFpNQSBkb2Vzbid0IHdyaXRlCi0JICBlb3MgbWFya2VyLCBzaW5jZSBMWk1BIGRlY29kZXIga25vd3MgdW5jb21wcmVzc2VkIHNpemUKLQkgIHN0b3JlZCBpbiAubHptYSBmaWxlIGhlYWRlci4KKyAgICAgICAgICBlb3MgbWFya2VyLCBzaW5jZSBMWk1BIGRlY29kZXIga25vd3MgdW5jb21wcmVzc2VkIHNpemUKKyAgICAgICAgICBzdG9yZWQgaW4gLmx6bWEgZmlsZSBoZWFkZXIuCiAKLSAgLXNpOgkgIFJlYWQgZGF0YSBmcm9tIHN0ZGluIChpdCB3aWxsIHdyaXRlIEVuZCBPZiBTdHJlYW0gbWFya2VyKS4KLSAgLXNvOgkgIFdyaXRlIGRhdGEgdG8gc3Rkb3V0CisgIC1zaTogICAgUmVhZCBkYXRhIGZyb20gc3RkaW4gKGl0IHdpbGwgd3JpdGUgRW5kIE9mIFN0cmVhbSBtYXJrZXIpLgorICAtc286ICAgIFdyaXRlIGRhdGEgdG8gc3Rkb3V0CiAKIAogRXhhbXBsZXM6CkBAIC0zNDUsMzIgKzI1OCwyOSBAQAogUmVjb21tZW5kYXRpb25zCiAtLS0tLS0tLS0tLS0tLS0KIAotVG8gaW5jcmVhc2UgY29tcHJlc3Npb24gcmF0aW8gZm9yIExaTUEgY29tcHJlc3NpbmcgaXQncyBkZXNpcmFibGUKK1RvIGluY3JlYXNlIHRoZSBjb21wcmVzc2lvbiByYXRpbyBmb3IgTFpNQSBjb21wcmVzc2luZyBpdCdzIGRlc2lyYWJsZQogdG8gaGF2ZSBhbGlnbmVkIGRhdGEgKGlmIGl0J3MgcG9zc2libGUpIGFuZCBhbHNvIGl0J3MgZGVzaXJhYmxlIHRvIGxvY2F0ZQogZGF0YSBpbiBzdWNoIG9yZGVyLCB3aGVyZSBjb2RlIGlzIGdyb3VwZWQgaW4gb25lIHBsYWNlIGFuZCBkYXRhIGlzCiBncm91cGVkIGluIG90aGVyIHBsYWNlIChpdCdzIGJldHRlciB0aGFuIHN1Y2ggbWl4aW5nOiBjb2RlLCBkYXRhLCBjb2RlLAogZGF0YSwgLi4uKS4KIAogCi1Vc2luZyBGaWx0ZXJzCi0tLS0tLS0tLS0tLS0tCi1Zb3UgY2FuIGluY3JlYXNlIGNvbXByZXNzaW9uIHJhdGlvIGZvciBzb21lIGRhdGEgdHlwZXMsIHVzaW5nCitGaWx0ZXJzCistLS0tLS0tCitZb3UgY2FuIGluY3JlYXNlIHRoZSBjb21wcmVzc2lvbiByYXRpbyBmb3Igc29tZSBkYXRhIHR5cGVzLCB1c2luZwogc3BlY2lhbCBmaWx0ZXJzIGJlZm9yZSBjb21wcmVzc2luZy4gRm9yIGV4YW1wbGUsIGl0J3MgcG9zc2libGUgdG8KLWluY3JlYXNlIGNvbXByZXNzaW9uIHJhdGlvIG9uIDUtMTAlIGZvciBjb2RlIGZvciB0aG9zZSBDUFUgSVNBczoKK2luY3JlYXNlIHRoZSBjb21wcmVzc2lvbiByYXRpbyBvbiA1LTEwJSBmb3IgY29kZSBmb3IgdGhvc2UgQ1BVIElTQXM6CiB4ODYsIElBLTY0LCBBUk0sIEFSTS1UaHVtYiwgUG93ZXJQQywgU1BBUkMuCiAKLVlvdSBjYW4gZmluZCBDL0MrKyBzb3VyY2UgY29kZSBvZiBzdWNoIGZpbHRlcnMgaW4gZm9sZGVyICI3emlwL0NvbXByZXNzL0JyYW5jaCIKK1lvdSBjYW4gZmluZCBDIHNvdXJjZSBjb2RlIG9mIHN1Y2ggZmlsdGVycyBpbiBDL0JyYSouKiBmaWxlcwogCi1Zb3UgY2FuIGNoZWNrIGNvbXByZXNzaW9uIHJhdGlvIGdhaW4gb2YgdGhlc2UgZmlsdGVycyB3aXRoIHN1Y2gKK1lvdSBjYW4gY2hlY2sgdGhlIGNvbXByZXNzaW9uIHJhdGlvIGdhaW4gb2YgdGhlc2UgZmlsdGVycyB3aXRoIHN1Y2gKIDctWmlwIGNvbW1hbmRzIChleGFtcGxlIGZvciBBUk0gY29kZSk6CiBObyBmaWx0ZXI6CiAgIDd6IGEgYTEuN3ogYS5iaW4gLW0wPWx6bWEKIAogV2l0aCBmaWx0ZXIgZm9yIGxpdHRsZS1lbmRpYW4gQVJNIGNvZGU6Ci0gIDd6IGEgYTIuN3ogYS5iaW4gLW0wPWJjX2FybSAtbTE9bHptYQotCi1XaXRoIGZpbHRlciBmb3IgYmlnLWVuZGlhbiBBUk0gY29kZSAodXNpbmcgYWRkaXRpb25hbCBTd2FwNCBmaWx0ZXIpOgotICA3eiBhIGEzLjd6IGEuYmluIC1tMD1zd2FwNCAtbTE9YmNfYXJtIC1tMj1sem1hCisgIDd6IGEgYTIuN3ogYS5iaW4gLW0wPWFybSAtbTE9bHptYQogCiBJdCB3b3JrcyBpbiBzdWNoIG1hbm5lcjoKIENvbXByZXNzaW5nICAgID0gRmlsdGVyX2VuY29kaW5nICsgTFpNQV9lbmNvZGluZwpAQCAtMzgzLDggKzI5Myw3IEBACiAKIFRoZXNlIGZpbHRlcnMgY29udmVydCBDQUxMIChjYWxsaW5nIHByb2NlZHVyZSkgaW5zdHJ1Y3Rpb25zCiBmcm9tIHJlbGF0aXZlIG9mZnNldHMgdG8gYWJzb2x1dGUgYWRkcmVzc2VzLCBzbyBzdWNoIGRhdGEgYmVjb21lcyBtb3JlCi1jb21wcmVzc2libGUuIFNvdXJjZSBjb2RlIG9mIHRoZXNlIENBTEwgZmlsdGVycyBpcyBwcmV0dHkgc2ltcGxlCi0oYWJvdXQgMjAgbGluZXMgb2YgQysrKSwgc28geW91IGNhbiBjb252ZXJ0IGl0IGZyb20gQysrIHZlcnNpb24geW91cnNlbGYuCitjb21wcmVzc2libGUuCiAKIEZvciBzb21lIElTQXMgKGZvciBleGFtcGxlLCBmb3IgTUlQUykgaXQncyBpbXBvc3NpYmxlIHRvIGdldCBnYWluIGZyb20gc3VjaCBmaWx0ZXIuCiAKQEAgLTM5MiwyNzIgKzMwMSwyOTQgQEAKIExaTUEgY29tcHJlc3NlZCBmaWxlIGZvcm1hdAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBPZmZzZXQgU2l6ZSBEZXNjcmlwdGlvbgotICAwCTEgICBTcGVjaWFsIExaTUEgcHJvcGVydGllcyBmb3IgY29tcHJlc3NlZCBkYXRhCi0gIDEJNCAgIERpY3Rpb25hcnkgc2l6ZSAobGl0dGxlIGVuZGlhbikKLSAgNQk4ICAgVW5jb21wcmVzc2VkIHNpemUgKGxpdHRsZSBlbmRpYW4pLiAtMSBtZWFucyB1bmtub3duIHNpemUKLSAxMwkgICAgQ29tcHJlc3NlZCBkYXRhCisgIDAgICAgIDEgICBTcGVjaWFsIExaTUEgcHJvcGVydGllcyAobGMsbHAsIHBiIGluIGVuY29kZWQgZm9ybSkKKyAgMSAgICAgNCAgIERpY3Rpb25hcnkgc2l6ZSAobGl0dGxlIGVuZGlhbikKKyAgNSAgICAgOCAgIFVuY29tcHJlc3NlZCBzaXplIChsaXR0bGUgZW5kaWFuKS4gLTEgbWVhbnMgdW5rbm93biBzaXplCisgMTMgICAgICAgICBDb21wcmVzc2VkIGRhdGEKIAogCiBBTlNJLUMgTFpNQSBEZWNvZGVyCiB+fn5+fn5+fn5+fn5+fn5+fn5+CiAKLVRvIGNvbXBpbGUgQU5TSS1DIExaTUEgRGVjb2RlciB5b3UgY2FuIHVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBmaWxlcyBzZXRzOgotMSkgTHptYURlY29kZS5oICsgTHptYURlY29kZS5jICsgTHptYVRlc3QuYyAgKGZhc3Rlc3QgdmVyc2lvbikKLTIpIEx6bWFEZWNvZGUuaCArIEx6bWFEZWNvZGVTaXplLmMgKyBMem1hVGVzdC5jICAob2xkIHNpemUtb3B0aW1pemVkIHZlcnNpb24pCi0zKSBMem1hU3RhdGVEZWNvZGUuaCArIEx6bWFTdGF0ZURlY29kZS5jICsgTHptYVN0YXRlVGVzdC5jICAoemxpYi1saWtlIGludGVyZmFjZSkKK1BsZWFzZSBub3RlIHRoYXQgaW50ZXJmYWNlcyBmb3IgQU5TSS1DIGNvZGUgd2VyZSBjaGFuZ2VkIGluIExaTUEgU0RLIDQuNTguCitJZiB5b3Ugd2FudCB0byB1c2Ugb2xkIGludGVyZmFjZXMgeW91IGNhbiBkb3dubG9hZCBwcmV2aW91cyB2ZXJzaW9uIG9mIExaTUEgU0RLCitmcm9tIHNvdXJjZWZvcmdlLm5ldCBzaXRlLgorCitUbyB1c2UgQU5TSS1DIExaTUEgRGVjb2RlciB5b3UgbmVlZCB0aGUgZm9sbG93aW5nIGZpbGVzOgorMSkgTHptYURlYy5oICsgTHptYURlYy5jICsgVHlwZXMuaAorTHptYVV0aWwvTHptYVV0aWwuYyBpcyBleGFtcGxlIGFwcGxpY2F0aW9uIHRoYXQgdXNlcyB0aGVzZSBmaWxlcy4KIAogCiBNZW1vcnkgcmVxdWlyZW1lbnRzIGZvciBMWk1BIGRlY29kaW5nCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUxaTUEgZGVjb2RlciBkb2Vzbid0IGFsbG9jYXRlIG1lbW9yeSBpdHNlbGYsIHNvIHlvdSBtdXN0Ci1hbGxvY2F0ZSBtZW1vcnkgYW5kIHNlbmQgaXQgdG8gTFpNQS4KLQogU3RhY2sgdXNhZ2Ugb2YgTFpNQSBkZWNvZGluZyBmdW5jdGlvbiBmb3IgbG9jYWwgdmFyaWFibGVzIGlzIG5vdAotbGFyZ2VyIHRoYW4gMjAwIGJ5dGVzLgorbGFyZ2VyIHRoYW4gMjAwLTQwMCBieXRlcy4KKworTFpNQSBEZWNvZGVyIHVzZXMgZGljdGlvbmFyeSBidWZmZXIgYW5kIGludGVybmFsIHN0YXRlIHN0cnVjdHVyZS4KK0ludGVybmFsIHN0YXRlIHN0cnVjdHVyZSBjb25zdW1lcworICBzdGF0ZV9zaXplID0gKDQgKyAoMS41IDw8IChsYyArIGxwKSkpIEtCCitieSBkZWZhdWx0IChsYz0zLCBscD0wKSwgc3RhdGVfc2l6ZSA9IDE2IEtCLgorCiAKIEhvdyBUbyBkZWNvbXByZXNzIGRhdGEKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotTFpNQSBEZWNvZGVyIChBTlNJLUMgdmVyc2lvbikgbm93IHN1cHBvcnRzIDUgaW50ZXJmYWNlczoKK0xaTUEgRGVjb2RlciAoQU5TSS1DIHZlcnNpb24pIG5vdyBzdXBwb3J0cyAyIGludGVyZmFjZXM6CiAxKSBTaW5nbGUtY2FsbCBEZWNvbXByZXNzaW5nCi0yKSBTaW5nbGUtY2FsbCBEZWNvbXByZXNzaW5nIHdpdGggaW5wdXQgc3RyZWFtIGNhbGxiYWNrCi0zKSBNdWx0aS1jYWxsIERlY29tcHJlc3Npbmcgd2l0aCBvdXRwdXQgYnVmZmVyCi00KSBNdWx0aS1jYWxsIERlY29tcHJlc3Npbmcgd2l0aCBpbnB1dCBjYWxsYmFjayBhbmQgb3V0cHV0IGJ1ZmZlcgotNSkgTXVsdGktY2FsbCBTdGF0ZSBEZWNvbXByZXNzaW5nICh6bGliLWxpa2UgaW50ZXJmYWNlKQorMikgTXVsdGktY2FsbCBTdGF0ZSBEZWNvbXByZXNzaW5nICh6bGliLWxpa2UgaW50ZXJmYWNlKQogCi1WYXJpYW50LTUgaXMgc2ltaWxhciB0byBWYXJpYW50LTQsIGJ1dCBWYXJpYW50LTUgZG9lc24ndCB1c2UgY2FsbGJhY2sgZnVuY3Rpb25zLgorWW91IG11c3QgdXNlIGV4dGVybmFsIGFsbG9jYXRvcjoKK0V4YW1wbGU6Cit2b2lkICpTekFsbG9jKHZvaWQgKnAsIHNpemVfdCBzaXplKSB7IHAgPSBwOyByZXR1cm4gbWFsbG9jKHNpemUpOyB9Cit2b2lkIFN6RnJlZSh2b2lkICpwLCB2b2lkICphZGRyZXNzKSB7IHAgPSBwOyBmcmVlKGFkZHJlc3MpOyB9CitJU3pBbGxvYyBhbGxvYyA9IHsgU3pBbGxvYywgU3pGcmVlIH07CiAKLURlY29tcHJlc3Npbmcgc3RlcHMKLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotMSkgcmVhZCBMWk1BIHByb3BlcnRpZXMgKDUgYnl0ZXMpOgotICAgdW5zaWduZWQgY2hhciBwcm9wZXJ0aWVzW0xaTUFfUFJPUEVSVElFU19TSVpFXTsKLQotMikgcmVhZCB1bmNvbXByZXNzZWQgc2l6ZSAoOCBieXRlcywgbGl0dGxlLWVuZGlhbikKLQotMykgRGVjb2RlIHByb3BlcnRpZXM6Ci0KLSAgQ0x6bWFEZWNvZGVyU3RhdGUgc3RhdGU7ICAvKiBpdCdzIDI0LTE0MCBieXRlcyBzdHJ1Y3R1cmUsIGlmIGludCBpcyAzMi1iaXQgKi8KLQotICBpZiAoTHptYURlY29kZVByb3BlcnRpZXMoJnN0YXRlLlByb3BlcnRpZXMsIHByb3BlcnRpZXMsIExaTUFfUFJPUEVSVElFU19TSVpFKSAhPSBMWk1BX1JFU1VMVF9PSykKLSAgICByZXR1cm4gUHJpbnRFcnJvcihycywgIkluY29ycmVjdCBzdHJlYW0gcHJvcGVydGllcyIpOwotCi00KSBBbGxvY2F0ZSBtZW1vcnkgYmxvY2sgZm9yIGludGVybmFsIFN0cnVjdHVyZXM6Ci0KLSAgc3RhdGUuUHJvYnMgPSAoQ1Byb2IgKiltYWxsb2MoTHptYUdldE51bVByb2JzKCZzdGF0ZS5Qcm9wZXJ0aWVzKSAqIHNpemVvZihDUHJvYikpOwotICBpZiAoc3RhdGUuUHJvYnMgPT0gMCkKLSAgICByZXR1cm4gUHJpbnRFcnJvcihycywga0NhbnRBbGxvY2F0ZU1lc3NhZ2UpOwotCi0gIExaTUEgZGVjb2RlciB1c2VzIGFycmF5IG9mIENQcm9iIHZhcmlhYmxlcyBhcyBpbnRlcm5hbCBzdHJ1Y3R1cmUuCi0gIEJ5IGRlZmF1bHQsIENQcm9iIGlzIHVuc2lnbmVkX3Nob3J0LiBCdXQgeW91IGNhbiBkZWZpbmUgX0xaTUFfUFJPQjMyIHRvIG1ha2UKLSAgaXQgdW5zaWduZWRfaW50LiBJdCBjYW4gaW5jcmVhc2Ugc3BlZWQgb24gc29tZSAzMi1iaXQgQ1BVcywgYnV0IG1lbW9yeQotICB1c2FnZSB3aWxsIGJlIGRvdWJsZWQgaW4gdGhhdCBjYXNlLgorWW91IGNhbiB1c2UgcCA9IHA7IG9wZXJhdG9yIHRvIGRpc2FibGUgY29tcGlsZXIgd2FybmluZ3MuCiAKIAotNSkgTWFpbiBEZWNvbXByZXNzaW5nCi0KLVlvdSBtdXN0IHVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBpbnRlcmZhY2VzOgotCi01LjEgU2luZ2xlLWNhbGwgRGVjb21wcmVzc2luZwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1NpbmdsZS1jYWxsIERlY29tcHJlc3NpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFdoZW4gdG8gdXNlOiBSQU0tPlJBTSBkZWNvbXByZXNzaW5nCi1Db21waWxlIGZpbGVzOiBMem1hRGVjb2RlLmgsIEx6bWFEZWNvZGUuYworQ29tcGlsZSBmaWxlczogTHptYURlYy5oICsgTHptYURlYy5jICsgVHlwZXMuaAogQ29tcGlsZSBkZWZpbmVzOiBubyBkZWZpbmVzCiBNZW1vcnkgUmVxdWlyZW1lbnRzOgogICAtIElucHV0IGJ1ZmZlcjogY29tcHJlc3NlZCBzaXplCiAgIC0gT3V0cHV0IGJ1ZmZlcjogdW5jb21wcmVzc2VkIHNpemUKLSAgLSBMWk1BIEludGVybmFsIFN0cnVjdHVyZXMgKH4xNiBLQiBmb3IgZGVmYXVsdCBzZXR0aW5ncykKKyAgLSBMWk1BIEludGVybmFsIFN0cnVjdHVyZXM6IHN0YXRlX3NpemUgKDE2IEtCIGZvciBkZWZhdWx0IHNldHRpbmdzKQogCiBJbnRlcmZhY2U6Ci0gIGludCByZXMgPSBMem1hRGVjb2RlKCZzdGF0ZSwKLSAgICAgIGluU3RyZWFtLCBjb21wcmVzc2VkU2l6ZSwgJmluUHJvY2Vzc2VkLAotICAgICAgb3V0U3RyZWFtLCBvdXRTaXplLCAmb3V0UHJvY2Vzc2VkKTsKKyAgaW50IEx6bWFEZWNvZGUoQnl0ZSAqZGVzdCwgU2l6ZVQgKmRlc3RMZW4sIGNvbnN0IEJ5dGUgKnNyYywgU2l6ZVQgKnNyY0xlbiwKKyAgICAgIGNvbnN0IEJ5dGUgKnByb3BEYXRhLCB1bnNpZ25lZCBwcm9wU2l6ZSwgRUx6bWFGaW5pc2hNb2RlIGZpbmlzaE1vZGUsCisgICAgICBFTHptYVN0YXR1cyAqc3RhdHVzLCBJU3pBbGxvYyAqYWxsb2MpOworICBJbjoKKyAgICBkZXN0ICAgICAtIG91dHB1dCBkYXRhCisgICAgZGVzdExlbiAgLSBvdXRwdXQgZGF0YSBzaXplCisgICAgc3JjICAgICAgLSBpbnB1dCBkYXRhCisgICAgc3JjTGVuICAgLSBpbnB1dCBkYXRhIHNpemUKKyAgICBwcm9wRGF0YSAtIExaTUEgcHJvcGVydGllcyAgKDUgYnl0ZXMpCisgICAgcHJvcFNpemUgLSBzaXplIG9mIHByb3BEYXRhIGJ1ZmZlciAoNSBieXRlcykKKyAgICBmaW5pc2hNb2RlIC0gSXQgaGFzIG1lYW5pbmcgb25seSBpZiB0aGUgZGVjb2RpbmcgcmVhY2hlcyBvdXRwdXQgbGltaXQgKCpkZXN0TGVuKS4KKwkgTFpNQV9GSU5JU0hfQU5ZIC0gRGVjb2RlIGp1c3QgZGVzdExlbiBieXRlcy4KKwkgTFpNQV9GSU5JU0hfRU5EIC0gU3RyZWFtIG11c3QgYmUgZmluaXNoZWQgYWZ0ZXIgKCpkZXN0TGVuKS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIExaTUFfRklOSVNIX0VORCwgd2hlbiB5b3Uga25vdyB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50IG91dHB1dCBidWZmZXIgY292ZXJzIGxhc3QgYnl0ZXMgb2Ygc3RyZWFtLgorICAgIGFsbG9jICAgIC0gTWVtb3J5IGFsbG9jYXRvci4KKworICBPdXQ6CisgICAgZGVzdExlbiAgLSBwcm9jZXNzZWQgb3V0cHV0IHNpemUKKyAgICBzcmNMZW4gICAtIHByb2Nlc3NlZCBpbnB1dCBzaXplCisKKyAgT3V0cHV0OgorICAgIFNaX09LCisgICAgICBzdGF0dXM6CisgICAgICAgIExaTUFfU1RBVFVTX0ZJTklTSEVEX1dJVEhfTUFSSworICAgICAgICBMWk1BX1NUQVRVU19OT1RfRklOSVNIRUQKKyAgICAgICAgTFpNQV9TVEFUVVNfTUFZQkVfRklOSVNIRURfV0lUSE9VVF9NQVJLCisgICAgU1pfRVJST1JfREFUQSAtIERhdGEgZXJyb3IKKyAgICBTWl9FUlJPUl9NRU0gIC0gTWVtb3J5IGFsbG9jYXRpb24gZXJyb3IKKyAgICBTWl9FUlJPUl9VTlNVUFBPUlRFRCAtIFVuc3VwcG9ydGVkIHByb3BlcnRpZXMKKyAgICBTWl9FUlJPUl9JTlBVVF9FT0YgLSBJdCBuZWVkcyBtb3JlIGJ5dGVzIGluIGlucHV0IGJ1ZmZlciAoc3JjKS4KKworICBJZiBMWk1BIGRlY29kZXIgc2VlcyBlbmRfbWFya2VyIGJlZm9yZSByZWFjaGluZyBvdXRwdXQgbGltaXQsIGl0IHJldHVybnMgT0sgcmVzdWx0LAorICBhbmQgb3V0cHV0IHZhbHVlIG9mIGRlc3RMZW4gd2lsbCBiZSBsZXNzIHRoYW4gb3V0cHV0IGJ1ZmZlciBzaXplIGxpbWl0LgorCisgIFlvdSBjYW4gdXNlIG11bHRpcGxlIGNoZWNrcyB0byB0ZXN0IGRhdGEgaW50ZWdyaXR5IGFmdGVyIGZ1bGwgZGVjb21wcmVzc2lvbjoKKyAgICAxKSBDaGVjayBSZXN1bHQgYW5kICJzdGF0dXMiIHZhcmlhYmxlLgorICAgIDIpIENoZWNrIHRoYXQgb3V0cHV0KGRlc3RMZW4pID0gdW5jb21wcmVzc2VkU2l6ZSwgaWYgeW91IGtub3cgcmVhbCB1bmNvbXByZXNzZWRTaXplLgorICAgIDMpIENoZWNrIHRoYXQgb3V0cHV0KHNyY0xlbikgPSBjb21wcmVzc2VkU2l6ZSwgaWYgeW91IGtub3cgcmVhbCBjb21wcmVzc2VkU2l6ZS4KKyAgICAgICBZb3UgbXVzdCB1c2UgY29ycmVjdCBmaW5pc2ggbW9kZSBpbiB0aGF0IGNhc2UuICovCiAKIAotNS4yIFNpbmdsZS1jYWxsIERlY29tcHJlc3Npbmcgd2l0aCBpbnB1dCBzdHJlYW0gY2FsbGJhY2sKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1XaGVuIHRvIHVzZTogRmlsZS0+UkFNIG9yIEZsYXNoLT5SQU0gZGVjb21wcmVzc2luZy4KLUNvbXBpbGUgZmlsZXM6IEx6bWFEZWNvZGUuaCwgTHptYURlY29kZS5jCi1Db21waWxlIGRlZmluZXM6IF9MWk1BX0lOX0NCCi1NZW1vcnkgUmVxdWlyZW1lbnRzOgotICAtIEJ1ZmZlciBmb3IgaW5wdXQgc3RyZWFtOiBhbnkgc2l6ZSAoZm9yIGV4YW1wbGUsIDE2IEtCKQotICAtIE91dHB1dCBidWZmZXI6IHVuY29tcHJlc3NlZCBzaXplCi0gIC0gTFpNQSBJbnRlcm5hbCBTdHJ1Y3R1cmVzICh+MTYgS0IgZm9yIGRlZmF1bHQgc2V0dGluZ3MpCitNdWx0aS1jYWxsIFN0YXRlIERlY29tcHJlc3NpbmcgKHpsaWItbGlrZSBpbnRlcmZhY2UpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUludGVyZmFjZToKLSAgdHlwZWRlZiBzdHJ1Y3QgX0NCdWZmZXIKLSAgewotICAgIElMem1hSW5DYWxsYmFjayBJbkNhbGxiYWNrOwotICAgIEZJTEUgKkZpbGU7Ci0gICAgdW5zaWduZWQgY2hhciBCdWZmZXJba0luQnVmZmVyU2l6ZV07Ci0gIH0gQ0J1ZmZlcjsKLQotICBpbnQgTHptYVJlYWRDb21wcmVzc2VkKHZvaWQgKm9iamVjdCwgY29uc3QgdW5zaWduZWQgY2hhciAqKmJ1ZmZlciwgU2l6ZVQgKnNpemUpCi0gIHsKLSAgICBDQnVmZmVyICpibyA9IChDQnVmZmVyICopb2JqZWN0OwotICAgICpidWZmZXIgPSBiby0+QnVmZmVyOwotICAgICpzaXplID0gTXlSZWFkRmlsZShiby0+RmlsZSwgYm8tPkJ1ZmZlciwga0luQnVmZmVyU2l6ZSk7Ci0gICAgcmV0dXJuIExaTUFfUkVTVUxUX09LOwotICB9Ci0KLSAgQ0J1ZmZlciBnX0luQnVmZmVyOwotCi0gIGdfSW5CdWZmZXIuRmlsZSA9IGluRmlsZTsKLSAgZ19JbkJ1ZmZlci5JbkNhbGxiYWNrLlJlYWQgPSBMem1hUmVhZENvbXByZXNzZWQ7Ci0gIGludCByZXMgPSBMem1hRGVjb2RlKCZzdGF0ZSwKLSAgICAgICZnX0luQnVmZmVyLkluQ2FsbGJhY2ssCi0gICAgICBvdXRTdHJlYW0sIG91dFNpemUsICZvdXRQcm9jZXNzZWQpOwotCi0KLTUuMyBNdWx0aS1jYWxsIGRlY29tcHJlc3Npbmcgd2l0aCBvdXRwdXQgYnVmZmVyCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotV2hlbiB0byB1c2U6IFJBTS0+RmlsZSBkZWNvbXByZXNzaW5nCi1Db21waWxlIGZpbGVzOiBMem1hRGVjb2RlLmgsIEx6bWFEZWNvZGUuYwotQ29tcGlsZSBkZWZpbmVzOiBfTFpNQV9PVVRfUkVBRAotTWVtb3J5IFJlcXVpcmVtZW50czoKLSAtIElucHV0IGJ1ZmZlcjogY29tcHJlc3NlZCBzaXplCi0gLSBCdWZmZXIgZm9yIG91dHB1dCBzdHJlYW06IGFueSBzaXplIChmb3IgZXhhbXBsZSwgMTYgS0IpCi0gLSBMWk1BIEludGVybmFsIFN0cnVjdHVyZXMgKH4xNiBLQiBmb3IgZGVmYXVsdCBzZXR0aW5ncykKLSAtIExaTUEgZGljdGlvbmFyeSAoZGljdGlvbmFyeSBzaXplIGlzIGVuY29kZWQgaW4gc3RyZWFtIHByb3BlcnRpZXMpCi0KLUludGVyZmFjZToKLQotICBzdGF0ZS5EaWN0aW9uYXJ5ID0gKHVuc2lnbmVkIGNoYXIgKiltYWxsb2Moc3RhdGUuUHJvcGVydGllcy5EaWN0aW9uYXJ5U2l6ZSk7Ci0KLSAgTHptYURlY29kZXJJbml0KCZzdGF0ZSk7Ci0gIGRvCi0gIHsKLSAgICBMem1hRGVjb2RlKCZzdGF0ZSwKLSAgICAgIGluQnVmZmVyLCBpbkF2YWlsLCAmaW5Qcm9jZXNzZWQsCi0gICAgICBnX091dEJ1ZmZlciwgb3V0QXZhaWwsICZvdXRQcm9jZXNzZWQpOwotICAgIGluQXZhaWwgLT0gaW5Qcm9jZXNzZWQ7Ci0gICAgaW5CdWZmZXIgKz0gaW5Qcm9jZXNzZWQ7Ci0gIH0KLSAgd2hpbGUgeW91IG5lZWQgbW9yZSBieXRlcwotCi0gIHNlZSBMem1hVGVzdC5jIGZvciBtb3JlIGRldGFpbHMuCi0KLQotNS40IE11bHRpLWNhbGwgZGVjb21wcmVzc2luZyB3aXRoIGlucHV0IGNhbGxiYWNrIGFuZCBvdXRwdXQgYnVmZmVyCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVdoZW4gdG8gdXNlOiBGaWxlLT5GaWxlIGRlY29tcHJlc3NpbmcKLUNvbXBpbGUgZmlsZXM6IEx6bWFEZWNvZGUuaCwgTHptYURlY29kZS5jCi1Db21waWxlIGRlZmluZXM6IF9MWk1BX0lOX0NCLCBfTFpNQV9PVVRfUkVBRAotTWVtb3J5IFJlcXVpcmVtZW50czoKLSAtIEJ1ZmZlciBmb3IgaW5wdXQgc3RyZWFtOiBhbnkgc2l6ZSAoZm9yIGV4YW1wbGUsIDE2IEtCKQotIC0gQnVmZmVyIGZvciBvdXRwdXQgc3RyZWFtOiBhbnkgc2l6ZSAoZm9yIGV4YW1wbGUsIDE2IEtCKQotIC0gTFpNQSBJbnRlcm5hbCBTdHJ1Y3R1cmVzICh+MTYgS0IgZm9yIGRlZmF1bHQgc2V0dGluZ3MpCi0gLSBMWk1BIGRpY3Rpb25hcnkgKGRpY3Rpb25hcnkgc2l6ZSBpcyBlbmNvZGVkIGluIHN0cmVhbSBwcm9wZXJ0aWVzKQotCi1JbnRlcmZhY2U6Ci0KLSAgc3RhdGUuRGljdGlvbmFyeSA9ICh1bnNpZ25lZCBjaGFyICopbWFsbG9jKHN0YXRlLlByb3BlcnRpZXMuRGljdGlvbmFyeVNpemUpOwotCi0gIEx6bWFEZWNvZGVySW5pdCgmc3RhdGUpOwotICBkbwotICB7Ci0gICAgTHptYURlY29kZSgmc3RhdGUsCi0gICAgICAmYm8uSW5DYWxsYmFjaywKLSAgICAgIGdfT3V0QnVmZmVyLCBvdXRBdmFpbCwgJm91dFByb2Nlc3NlZCk7Ci0gIH0KLSAgd2hpbGUgeW91IG5lZWQgbW9yZSBieXRlcwotCi0gIHNlZSBMem1hVGVzdC5jIGZvciBtb3JlIGRldGFpbHM6Ci0KLQotNS41IE11bHRpLWNhbGwgU3RhdGUgRGVjb21wcmVzc2luZyAoemxpYi1saWtlIGludGVyZmFjZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogV2hlbiB0byB1c2U6IGZpbGUtPmZpbGUgZGVjb21wcmVzc2luZwotQ29tcGlsZSBmaWxlczogTHptYVN0YXRlRGVjb2RlLmgsIEx6bWFTdGF0ZURlY29kZS5jCi1Db21waWxlIGRlZmluZXM6CitDb21waWxlIGZpbGVzOiBMem1hRGVjLmggKyBMem1hRGVjLmMgKyBUeXBlcy5oCisKIE1lbW9yeSBSZXF1aXJlbWVudHM6CiAgLSBCdWZmZXIgZm9yIGlucHV0IHN0cmVhbTogYW55IHNpemUgKGZvciBleGFtcGxlLCAxNiBLQikKICAtIEJ1ZmZlciBmb3Igb3V0cHV0IHN0cmVhbTogYW55IHNpemUgKGZvciBleGFtcGxlLCAxNiBLQikKLSAtIExaTUEgSW50ZXJuYWwgU3RydWN0dXJlcyAofjE2IEtCIGZvciBkZWZhdWx0IHNldHRpbmdzKQotIC0gTFpNQSBkaWN0aW9uYXJ5IChkaWN0aW9uYXJ5IHNpemUgaXMgZW5jb2RlZCBpbiBzdHJlYW0gcHJvcGVydGllcykKKyAtIExaTUEgSW50ZXJuYWwgU3RydWN0dXJlczogc3RhdGVfc2l6ZSAoMTYgS0IgZm9yIGRlZmF1bHQgc2V0dGluZ3MpCisgLSBMWk1BIGRpY3Rpb25hcnkgKGRpY3Rpb25hcnkgc2l6ZSBpcyBlbmNvZGVkIGluIExaTUEgcHJvcGVydGllcyBoZWFkZXIpCiAKLUludGVyZmFjZToKKzEpIHJlYWQgTFpNQSBwcm9wZXJ0aWVzICg1IGJ5dGVzKSBhbmQgdW5jb21wcmVzc2VkIHNpemUgKDggYnl0ZXMsIGxpdHRsZS1lbmRpYW4pIHRvIGhlYWRlcjoKKyAgIHVuc2lnbmVkIGNoYXIgaGVhZGVyW0xaTUFfUFJPUFNfU0laRSArIDhdOworICAgUmVhZEZpbGUoaW5GaWxlLCBoZWFkZXIsIHNpemVvZihoZWFkZXIpCiAKLSAgc3RhdGUuRGljdGlvbmFyeSA9ICh1bnNpZ25lZCBjaGFyICopbWFsbG9jKHN0YXRlLlByb3BlcnRpZXMuRGljdGlvbmFyeVNpemUpOworMikgQWxsb2NhdGUgQ0x6bWFEZWMgc3RydWN0dXJlcyAoc3RhdGUgKyBkaWN0aW9uYXJ5KSB1c2luZyBMWk1BIHByb3BlcnRpZXMKIAorICBDTHptYURlYyBzdGF0ZTsKKyAgTHptYURlY19Db25zdHIoJnN0YXRlKTsKKyAgcmVzID0gTHptYURlY19BbGxvY2F0ZSgmc3RhdGUsIGhlYWRlciwgTFpNQV9QUk9QU19TSVpFLCAmZ19BbGxvYyk7CisgIGlmIChyZXMgIT0gU1pfT0spCisgICAgcmV0dXJuIHJlczsKIAotICBMem1hRGVjb2RlckluaXQoJnN0YXRlKTsKLSAgZG8KKzMpIEluaXQgTHptYURlYyBzdHJ1Y3R1cmUgYmVmb3JlIGFueSBuZXcgTFpNQSBzdHJlYW0uIEFuZCBjYWxsIEx6bWFEZWNfRGVjb2RlVG9CdWYgaW4gbG9vcAorCisgIEx6bWFEZWNfSW5pdCgmc3RhdGUpOworICBmb3IgKDs7KQogICB7Ci0gICAgcmVzID0gTHptYURlY29kZSgmc3RhdGUsCi0gICAgICBpbkJ1ZmZlciwgaW5BdmFpbCwgJmluUHJvY2Vzc2VkLAotICAgICAgZ19PdXRCdWZmZXIsIG91dEF2YWlsLCAmb3V0UHJvY2Vzc2VkLAotICAgICAgZmluaXNoRGVjb2RpbmcpOwotICAgIGluQXZhaWwgLT0gaW5Qcm9jZXNzZWQ7Ci0gICAgaW5CdWZmZXIgKz0gaW5Qcm9jZXNzZWQ7CisgICAgLi4uCisgICAgaW50IHJlcyA9IEx6bWFEZWNfRGVjb2RlVG9CdWYoQ0x6bWFEZWMgKnAsIEJ5dGUgKmRlc3QsIFNpemVUICpkZXN0TGVuLAorCWNvbnN0IEJ5dGUgKnNyYywgU2l6ZVQgKnNyY0xlbiwgRUx6bWFGaW5pc2hNb2RlIGZpbmlzaE1vZGUpOworICAgIC4uLgogICB9Ci0gIHdoaWxlIHlvdSBuZWVkIG1vcmUgYnl0ZXMKLQotICBzZWUgTHptYVN0YXRlVGVzdC5jIGZvciBtb3JlIGRldGFpbHM6CiAKIAotNikgRnJlZSBhbGwgYWxsb2NhdGVkIGJsb2NrcworNCkgRnJlZSBhbGwgYWxsb2NhdGVkIHN0cnVjdHVyZXMKKyAgTHptYURlY19GcmVlKCZzdGF0ZSwgJmdfQWxsb2MpOworCitGb3IgZnVsbCBjb2RlIGV4YW1wbGUsIGxvb2sgYXQgQy9Mem1hVXRpbC9Mem1hVXRpbC5jIGNvZGUuCiAKIAotTm90ZQotLS0tLQotTHptYURlY29kZVNpemUuYyBpcyBzaXplLW9wdGltaXplZCB2ZXJzaW9uIG9mIEx6bWFEZWNvZGUuYy4KLUJ1dCBjb21waWxlZCBjb2RlIG9mIEx6bWFEZWNvZGVTaXplLmMgY2FuIGJlIGxhcmdlciB0aGFuCi1jb21waWxlZCBjb2RlIG9mIEx6bWFEZWNvZGUuYy4gU28gaXQncyBiZXR0ZXIgdG8gdXNlCi1Mem1hRGVjb2RlLmMgaW4gbW9zdCBjYXNlcy4KK0hvdyBUbyBjb21wcmVzcyBkYXRhCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb21waWxlIGZpbGVzOiBMem1hRW5jLmggKyBMem1hRW5jLmMgKyBUeXBlcy5oICsKK0x6RmluZC5jICsgTHpGaW5kLmggKyBMekZpbmRNdC5jICsgTHpGaW5kTXQuaCArIEx6SGFzaC5oCisKK01lbW9yeSBSZXF1aXJlbWVudHM6CisgIC0gKGRpY3RTaXplICogMTEuNSArIDYgTUIpICsgc3RhdGVfc2l6ZQorCitMem1hIEVuY29kZXIgY2FuIHVzZSB0d28gbWVtb3J5IGFsbG9jYXRvcnM6CisxKSBhbGxvYyAtIGZvciBzbWFsbCBhcnJheXMuCisyKSBhbGxvY0JpZyAtIGZvciBiaWcgYXJyYXlzLgorCitGb3IgZXhhbXBsZSwgeW91IGNhbiB1c2UgTGFyZ2UgUkFNIFBhZ2VzICgyIE1CKSBpbiBhbGxvY0JpZyBhbGxvY2F0b3IgZm9yCitiZXR0ZXIgY29tcHJlc3Npb24gc3BlZWQuIE5vdGUgdGhhdCBXaW5kb3dzIGhhcyBiYWQgaW1wbGVtZW50YXRpb24gZm9yCitMYXJnZSBSQU0gUGFnZXMuCitJdCdzIE9LIHRvIHVzZSBzYW1lIGFsbG9jYXRvciBmb3IgYWxsb2MgYW5kIGFsbG9jQmlnLgogCiAKLUVYSVQgY29kZXMKLS0tLS0tLS0tLS0tCitTaW5nbGUtY2FsbCBDb21wcmVzc2lvbiB3aXRoIGNhbGxiYWNrcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotTFpNQSBkZWNvZGVyIGNhbiByZXR1cm4gb25lIG9mIHRoZSBmb2xsb3dpbmcgY29kZXM6CitDaGVjayBDL0x6bWFVdGlsL0x6bWFVdGlsLmMgYXMgZXhhbXBsZSwKIAotI2RlZmluZSBMWk1BX1JFU1VMVF9PSyAwCi0jZGVmaW5lIExaTUFfUkVTVUxUX0RBVEFfRVJST1IgMQorV2hlbiB0byB1c2U6IGZpbGUtPmZpbGUgZGVjb21wcmVzc2luZwogCi1JZiB5b3UgdXNlIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBpbnB1dCBkYXRhIGFuZCB5b3UgcmV0dXJuIHNvbWUKLWVycm9yIGNvZGUsIExaTUEgRGVjb2RlciBhbHNvIHJldHVybnMgdGhhdCBjb2RlLgorMSkgeW91IG11c3QgaW1wbGVtZW50IGNhbGxiYWNrIHN0cnVjdHVyZXMgZm9yIGludGVyZmFjZXM6CitJU2VxSW5TdHJlYW0KK0lTZXFPdXRTdHJlYW0KK0lDb21wcmVzc1Byb2dyZXNzCitJU3pBbGxvYworCitzdGF0aWMgdm9pZCAqU3pBbGxvYyh2b2lkICpwLCBzaXplX3Qgc2l6ZSkgeyBwID0gcDsgcmV0dXJuIE15QWxsb2Moc2l6ZSk7IH0KK3N0YXRpYyB2b2lkIFN6RnJlZSh2b2lkICpwLCB2b2lkICphZGRyZXNzKSB7ICBwID0gcDsgTXlGcmVlKGFkZHJlc3MpOyB9CitzdGF0aWMgSVN6QWxsb2MgZ19BbGxvYyA9IHsgU3pBbGxvYywgU3pGcmVlIH07CisKKyAgQ0ZpbGVTZXFJblN0cmVhbSBpblN0cmVhbTsKKyAgQ0ZpbGVTZXFPdXRTdHJlYW0gb3V0U3RyZWFtOworCisgIGluU3RyZWFtLmZ1bmNUYWJsZS5SZWFkID0gTXlSZWFkOworICBpblN0cmVhbS5maWxlID0gaW5GaWxlOworICBvdXRTdHJlYW0uZnVuY1RhYmxlLldyaXRlID0gTXlXcml0ZTsKKyAgb3V0U3RyZWFtLmZpbGUgPSBvdXRGaWxlOworCisKKzIpIENyZWF0ZSBDTHptYUVuY0hhbmRsZSBvYmplY3Q7CisKKyAgQ0x6bWFFbmNIYW5kbGUgZW5jOworCisgIGVuYyA9IEx6bWFFbmNfQ3JlYXRlKCZnX0FsbG9jKTsKKyAgaWYgKGVuYyA9PSAwKQorICAgIHJldHVybiBTWl9FUlJPUl9NRU07CisKKworMykgaW5pdGlhbGl6ZSBDTHptYUVuY1Byb3BzIHByb3BlcnRpZXM7CisKKyAgTHptYUVuY1Byb3BzX0luaXQoJnByb3BzKTsKKworICBUaGVuIHlvdSBjYW4gY2hhbmdlIHNvbWUgcHJvcGVydGllcyBpbiB0aGF0IHN0cnVjdHVyZS4KKworNCkgU2VuZCBMWk1BIHByb3BlcnRpZXMgdG8gTFpNQSBFbmNvZGVyCisKKyAgcmVzID0gTHptYUVuY19TZXRQcm9wcyhlbmMsICZwcm9wcyk7CisKKzUpIFdyaXRlIGVuY29kZWQgcHJvcGVydGllcyB0byBoZWFkZXIKKworICAgIEJ5dGUgaGVhZGVyW0xaTUFfUFJPUFNfU0laRSArIDhdOworICAgIHNpemVfdCBoZWFkZXJTaXplID0gTFpNQV9QUk9QU19TSVpFOworICAgIFVJbnQ2NCBmaWxlU2l6ZTsKKyAgICBpbnQgaTsKKworICAgIHJlcyA9IEx6bWFFbmNfV3JpdGVQcm9wZXJ0aWVzKGVuYywgaGVhZGVyLCAmaGVhZGVyU2l6ZSk7CisgICAgZmlsZVNpemUgPSBNeUdldEZpbGVMZW5ndGgoaW5GaWxlKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorICAgICAgaGVhZGVyW2hlYWRlclNpemUrK10gPSAoQnl0ZSkoZmlsZVNpemUgPj4gKDggKiBpKSk7CisgICAgTXlXcml0ZUZpbGVBbmRDaGVjayhvdXRGaWxlLCBoZWFkZXIsIGhlYWRlclNpemUpCisKKzYpIENhbGwgZW5jb2RpbmcgZnVuY3Rpb246CisgICAgICByZXMgPSBMem1hRW5jX0VuY29kZShlbmMsICZvdXRTdHJlYW0uZnVuY1RhYmxlLCAmaW5TdHJlYW0uZnVuY1RhYmxlLAorICAgICAgICBOVUxMLCAmZ19BbGxvYywgJmdfQWxsb2MpOworCis3KSBEZXN0cm95IExaTUEgRW5jb2RlciBPYmplY3QKKyAgTHptYUVuY19EZXN0cm95KGVuYywgJmdfQWxsb2MsICZnX0FsbG9jKTsKKworCitJZiBjYWxsYmFjayBmdW5jdGlvbiByZXR1cm4gc29tZSBlcnJvciBjb2RlLCBMem1hRW5jX0VuY29kZSBhbHNvIHJldHVybnMgdGhhdCBjb2RlLgorCisKK1NpbmdsZS1jYWxsIFJBTS0+UkFNIENvbXByZXNzaW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTaW5nbGUtY2FsbCBSQU0tPlJBTSBDb21wcmVzc2lvbiBpcyBzaW1pbGFyIHRvIENvbXByZXNzaW9uIHdpdGggY2FsbGJhY2tzLAorYnV0IHlvdSBwcm92aWRlIHBvaW50ZXJzIHRvIGJ1ZmZlcnMgaW5zdGVhZCBvZiBwb2ludGVycyB0byBzdHJlYW0gY2FsbGJhY2tzOgorCitIUmVzIEx6bWFFbmNvZGUoQnl0ZSAqZGVzdCwgU2l6ZVQgKmRlc3RMZW4sIGNvbnN0IEJ5dGUgKnNyYywgU2l6ZVQgc3JjTGVuLAorICAgIENMem1hRW5jUHJvcHMgKnByb3BzLCBCeXRlICpwcm9wc0VuY29kZWQsIFNpemVUICpwcm9wc1NpemUsIGludCB3cml0ZUVuZE1hcmssCisgICAgSUNvbXByZXNzUHJvZ3Jlc3MgKnByb2dyZXNzLCBJU3pBbGxvYyAqYWxsb2MsIElTekFsbG9jICphbGxvY0JpZyk7CisKK1JldHVybiBjb2RlOgorICBTWl9PSyAgICAgICAgICAgICAgIC0gT0sKKyAgU1pfRVJST1JfTUVNICAgICAgICAtIE1lbW9yeSBhbGxvY2F0aW9uIGVycm9yCisgIFNaX0VSUk9SX1BBUkFNICAgICAgLSBJbmNvcnJlY3QgcGFyYW1hdGVyCisgIFNaX0VSUk9SX09VVFBVVF9FT0YgLSBvdXRwdXQgYnVmZmVyIG92ZXJmbG93CisgIFNaX0VSUk9SX1RIUkVBRCAgICAgLSBlcnJvcnMgaW4gbXVsdGl0aHJlYWRpbmcgZnVuY3Rpb25zIChvbmx5IGZvciBNdCB2ZXJzaW9uKQogCiAKIAogTFpNQSBEZWZpbmVzCiAtLS0tLS0tLS0tLS0KIAotX0xaTUFfSU5fQ0IgICAgLSBVc2UgY2FsbGJhY2sgZm9yIGlucHV0IGRhdGEKK19MWk1BX1NJWkVfT1BUIC0gRW5hYmxlIHNvbWUgb3B0aW1pemF0aW9ucyBpbiBMWk1BIERlY29kZXIgdG8gZ2V0IHNtYWxsZXIgZXhlY3V0YWJsZSBjb2RlLgogCi1fTFpNQV9PVVRfUkVBRCAtIFVzZSByZWFkIGZ1bmN0aW9uIGZvciBvdXRwdXQgZGF0YQorX0xaTUFfUFJPQjMyICAgLSBJdCBjYW4gaW5jcmVhc2UgdGhlIHNwZWVkIG9uIHNvbWUgMzItYml0IENQVXMsIGJ1dCBtZW1vcnkgdXNhZ2UgZm9yCisgICAgICAgICAgICAgICAgIHNvbWUgc3RydWN0dXJlcyB3aWxsIGJlIGRvdWJsZWQgaW4gdGhhdCBjYXNlLgogCi1fTFpNQV9MT0NfT1BUICAtIEVuYWJsZSBsb2NhbCBzcGVlZCBvcHRpbWl6YXRpb25zIGluc2lkZSBjb2RlLgotCQkgX0xaTUFfTE9DX09QVCBpcyBvbmx5IGZvciBMem1hRGVjb2RlU2l6ZS5jIChzaXplLW9wdGltaXplZCB2ZXJzaW9uKS4KLQkJIF9MWk1BX0xPQ19PUFQgZG9lc24ndCBhZmZlY3QgTHptYURlY29kZS5jIChzcGVlZC1vcHRpbWl6ZWQgdmVyc2lvbikKLQkJIGFuZCBMem1hU3RhdGVEZWNvZGUuYworX0xaTUFfVUlOVDMyX0lTX1VMT05HICAtIERlZmluZSBpdCBpZiBpbnQgaXMgMTYtYml0IG9uIHlvdXIgY29tcGlsZXIgYW5kIGxvbmcgaXMgMzItYml0LgogCi1fTFpNQV9QUk9CMzIgICAtIEl0IGNhbiBpbmNyZWFzZSBzcGVlZCBvbiBzb21lIDMyLWJpdCBDUFVzLAotCQkgYnV0IG1lbW9yeSB1c2FnZSB3aWxsIGJlIGRvdWJsZWQgaW4gdGhhdCBjYXNlCi0KLV9MWk1BX1VJTlQzMl9JU19VTE9ORyAgLSBEZWZpbmUgaXQgaWYgaW50IGlzIDE2LWJpdCBvbiB5b3VyIGNvbXBpbGVyCi0JCQkgYW5kIGxvbmcgaXMgMzItYml0LgotCi1fTFpNQV9TWVNURU1fU0laRV9UICAtIERlZmluZSBpdCBpZiB5b3Ugd2FudCB0byB1c2Ugc3lzdGVtJ3Mgc2l6ZV90LgotCQkgICAgICAgWW91IGNhbiB1c2UgaXQgdG8gZW5hYmxlIDY0LWJpdCBzaXplcyBzdXBwb3J0aW5nCi0KK19MWk1BX05PX1NZU1RFTV9TSVpFX1QgIC0gRGVmaW5lIGl0IGlmIHlvdSBkb24ndCB3YW50IHRvIHVzZSBzaXplX3QgdHlwZS4KIAogCiBDKysgTFpNQSBFbmNvZGVyL0RlY29kZXIKIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgogQysrIExaTUEgY29kZSB1c2UgQ09NLWxpa2UgaW50ZXJmYWNlcy4gU28gaWYgeW91IHdhbnQgdG8gdXNlIGl0LAogeW91IGNhbiBzdHVkeSBiYXNpY3Mgb2YgQ09NL09MRS4KK0MrKyBMWk1BIGNvZGUgaXMganVzdCB3cmFwcGVyIG92ZXIgQU5TSS1DIGNvZGUuCiAKLUJ5IGRlZmF1bHQsIExaTUEgRW5jb2RlciBjb250YWlucyBhbGwgTWF0Y2ggRmluZGVycy4KLUJ1dCBmb3IgY29tcHJlc3NpbmcgaXQncyBlbm91Z2ggdG8gaGF2ZSBqdXN0IG9uZSBvZiB0aGVtLgotU28gZm9yIHJlZHVjaW5nIHNpemUgb2YgY29tcHJlc3NpbmcgY29kZSB5b3UgY2FuIGRlZmluZToKLSAgI2RlZmluZSBDT01QUkVTU19NRl9CVAotICAjZGVmaW5lIENPTVBSRVNTX01GX0JUNAotYW5kIGl0IHdpbGwgdXNlIG9ubHkgYnQ0IG1hdGNoIGZpbmRlci4KIAorQysrIE5vdGVzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0lmIHlvdSB1c2Ugc29tZSBDKysgY29kZSBmb2xkZXJzIGluIDctWmlwIChmb3IgZXhhbXBsZSwgQysrIGNvZGUgZm9yIC43eiBoYW5kbGluZyksCit5b3UgbXVzdCBjaGVjayB0aGF0IHlvdSBjb3JyZWN0bHkgd29yayB3aXRoICJuZXciIG9wZXJhdG9yLgorNy1aaXAgY2FuIGJlIGNvbXBpbGVkIHdpdGggTVNWQyA2LjAgdGhhdCBkb2Vzbid0IHRocm93ICJleGNlcHRpb24iIGZyb20gIm5ldyIgb3BlcmF0b3IuCitTbyA3LVppcCB1c2VzICJDUFBcQ29tbW9uXE5ld0hhbmRsZXIuY3BwIiB0aGF0IHJlZGVmaW5lcyAibmV3IiBvcGVyYXRvcjoKK29wZXJhdG9yIG5ldyhzaXplX3Qgc2l6ZSkKK3sKKyAgdm9pZCAqcCA9IDo6bWFsbG9jKHNpemUpOworICBpZiAocCA9PSAwKQorICAgIHRocm93IENOZXdFeGNlcHRpb24oKTsKKyAgcmV0dXJuIHA7Cit9CitJZiB5b3UgdXNlIE1TQ1YgdGhhdCB0aHJvd3MgZXhjZXB0aW9uIGZvciAibmV3IiBvcGVyYXRvciwgeW91IGNhbiBjb21waWxlIHdpdGhvdXQKKyJOZXdIYW5kbGVyLmNwcCIuIFNvIHN0YW5kYXJkIGV4Y2VwdGlvbiB3aWxsIGJlIHVzZWQuIEFjdHVhbGx5IHNvbWUgY29kZSBvZgorNy1aaXAgY2F0Y2hlcyBhbnkgZXhjZXB0aW9uIGluIGludGVybmFsIGNvZGUgYW5kIGNvbnZlcnRzIGl0IHRvIEhSRVNVTFQgY29kZS4KK1NvIHlvdSBkb24ndCBuZWVkIHRvIGNhdGNoIENOZXdFeGNlcHRpb24sIGlmIHlvdSBjYWxsIENPTSBpbnRlcmZhY2VzIG9mIDctWmlwLgogCiAtLS0KIAogaHR0cDovL3d3dy43LXppcC5vcmcKK2h0dHA6Ly93d3cuNy16aXAub3JnL3Nkay5odG1sCiBodHRwOi8vd3d3LjctemlwLm9yZy9zdXBwb3J0Lmh0bWwK